0

こんにちは Stackoverflow コミュニティです。

現在、Zend Framework 2 を使用して XML-RPC サーバーを開発しています。サーバーの作成を担当する ServiceController があります。

class ServiceController extends AbstractActionController{

    public function xmlAction()
    {
        $this->handleXML();
        $response = $this->getResponse();
        return $response;
    }

    private function handleXML()
    {
        $xmlServer = new Zend\XmlRpc\Server();
        $xmlServer->setClass('Beam\Model\service\Service', 'service');
        echo $xmlServer->handle();
    }

}

ServiceClass は私の Webapi です

class Service{

    /**
     * getAvailablePackages
     *
     * getAvailablePackages is responsible for returning all packages which reference a given licensenumber
     *
     * @param string $licenseNumber
     * @return String
     */
    public function getAvailablePackages($licenseNumber){

        //need to access the entityManager
        $em = $this->getServiceLocator->get('Doctrine\ORM\EntityManager'); 

        return "testresponse";
    }

}

XML RPC サーバーは正常に動作します。クライアントで getAvailablePackages メソッドを呼び出すと、応答として「testrespons」が返されます。ただし、問題は、getAvailablePackages でデータベースからいくつかのデータを選択したいのですが、非 Controller クラスで entityManager にアクセスする方法がわからないことです。

この問題を解決する方法を知っている人はいますか? ご回答ありがとうございます。

4

1 に答える 1

0

可能な解決策は、工場を持つことです。

<?php
namespace ....;

use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\FactoryInterface;

class ServiceFactory implements FactoryInterface
{
    public function createService (ServiceLocatorInterface $serviceLocator)
    {
        return new Service ($serviceLocator->get ('Doctrine\ORM\EntityManager'));
    }
}

したがって、Entity manager にアクセスできるようになります。

于 2013-08-19T14:39:46.893 に答える