1

イントラネットとエクストラネットの 2 つのアプリケーションがあります。エクストラネット アプリはデータベースと直接通信せず、Web サービスとのみ通信します。イントラネット アプリはデータベースで正常です。

データベースとの通信に SOAP を使用する必要があるため、View -> Controller -> Service -> Entity を使用します。

私が使用しているサービスと通信するために:

[コントローラ]

$client = new Client("my_soap_address");
$user = $client->test();

[サービス]

public function test()
{
   $res = $this->em->getRepository("my_entity")->fetchPairs();
   return $res;
}

SOAP がなくても完璧に動作します。SOAP では、次のエラーが返されます。

Call to a member function getRepository() on a non-object

サービスが文字列、整数、またはブール値を次のように返す場合:

[サービス]

public function test()
{
   return "is OK";
}

私の SOAP は正常に動作します。

問題は、getRepository()、getReference() などのメソッドです。しかし、データベースから情報を取得または配置するには、これらのメソッドが必要です。

誰でもこの問題を解決できますか?

どうもありがとう!

ps .: コントローラーとサービスの間に handleWSDL と handleSOAP を備えたコントローラーがあります。

4

1 に答える 1

1

問題を解決しました!サービスが機能するためには、EntityManager を Soap と共に送信する必要があります。

さあ行こう:

私のSoapControllerで:

use Path\of\my\service as MyService;

public function handleSOAP($class, $url) {
    $soap = new Server($url."?wsdl");
    $soap->setClass($class);
    $soap->setObject(new MyService($this->getServiceLocator()->get('Doctrine\ORM\EntityManager')));
    $soap->handle();
}

機能するには、setObject メソッド内にインスタンスが必要です。これは、getServiceConfig() 内の Module.php ファイルでインスタンス化したサービスです。

では、もう大丈夫です!

ありがとう!

于 2013-10-03T15:13:28.227 に答える