2013-03-27 100 views
1

我試圖在Symfony 2框架中使用SOAP實現WebService。在服務器端im設置類到我的服務器(setClass()方法)因爲我需要在類的一個實例上做更多的操作。 如果我用的setObject爲soapCalls,它的工作好,Symfony 2項目中的SOAP服務器

use path\to\Test; 
public function indexAction() 
{ 
    $server = new \SoapServer(null, array('uri' => "http://test-uri.cz/")); 
    $server->setObject($this->get('my_service')); 
    $response = new Response(); 
    $response->headers->set('Content-Type', 'text/xml'); 

    ob_start(); 
    $server->handle(); 
    if (ob_get_length() > 0) { 
     $response->setContent(ob_get_clean()); 
    } 

    return $response; 
} 

但setClass方法不`噸的工作。

use path\to\Test; 
public function indexAction() 
{ 
    $server = new \SoapServer(null, array('uri' => "http://test-uri.cz/")); 
    $server->setClass('Test'); 
    $response = new Response(); 
    $response->headers->set('Content-Type', 'text/xml'); 

    ob_start(); 
    $server->handle(); 
    if (ob_get_length() > 0) { 
     $response->setContent(ob_get_clean()); 
    } 

    return $response; 
} 

有人能給我任何提示嗎?

+0

我也使用setObject。你的服務是一個類的實例,所以一個對象...我想我們可以使用setClass,如果你的SOAP管理器沒有任何複雜的依賴關係,如服務可能有... – AlterPHP 2013-03-27 13:29:14

+0

但是setObject創建類的新實例,當你調用__soapCall方法。而且我在一些簡單的類上測試了setClass,它沒有依賴性,並且包含一些簡單的方法。所以複雜的課堂不會有問題。 – gavec 2013-03-27 13:36:58

+0

我認爲它不會創建新的實例,但使用現有的實例(一個現有的對象)! setClass確實創建了一個新的實例。 – AlterPHP 2013-03-27 13:38:56

回答

1

如果你想使用SoapServer的:: setClass,註明您的服務的構造函數的參數每一個,以及一個完整的命名空間的字符串陳述類名

$server->setClass('Acme\YourBundle\SoapManager', $arg0, $arg1, $arg2 /*, ... */); 
+0

我知道。正如我所說,爲了測試目的,我創建了一個沒有構造函數的簡單類...所以我不需要任何參數。 – gavec 2013-03-27 13:41:15

+0

我試圖將名稱空間字符串與類名稱插入到類的上方並使用setClass()方法,但仍然發生內部錯誤。 – gavec 2013-03-28 10:44:04

1

最後它的工作原理。 ..我有壞的命名空間,並且在SOAP服務器中需要在setClass()之後使用setPersistence()方法。