2013-03-27 1 views
1

Я пытаюсь реализовать WebService с использованием SOAP в рамках Symfony 2. На стороне сервера я устанавливаю класс на мой сервер (метод setClass()), потому что мне нужно сделать больше операций над одним экземпляром класса. Если я использовал SetObject для soapCalls, она работает хорошо,SOAP-сервер в проекте Symfony 2

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, если ваш диспетчер мыла не имеет какой-либо сложной зависимости, поскольку служба может иметь ... – AlterPHP

+0

Но setObject создает новый экземпляр класса, когда вы вызовите метод __soapCall. И Im тестирует setClass на каком-то простом классе, который не имеет зависимостей и содержит простой метод. Поэтому проблема с сложным классом не может быть проблемой. – gavec

+0

Я думаю, что он НЕ создает новый экземпляр, но использует существующий экземпляр (существующий объект)! setClass создает новый экземпляр. – AlterPHP

ответ

1

Если вы хотите использовать SoapServer :: setClass, вы должны указать каждые параметры конструктора службы, и указать имя класса с полной строкой пространства имен:

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

Я знаю. Как я уже сказал, для целей тестирования я создал простой класс без конструктора ... поэтому мне не нужны аргументы. – gavec

+0

Я попытался вставить строку пространства имен с именем класса в «использование» над классом и в метод setClass(), но все же я получаю внутреннюю ошибку. – gavec

1

Наконец он работает. .. У меня было плохое пространство имен, а на сервере SOAP нужно использовать метод setPersistence() после setClass().