我在zend 1中开发了一个项目,但决定转到zend 2来利用事件等。
我最初的问题是,我似乎找不到任何关于如何以我需要的方式使用模型的教程。
我有一个api控制器,它被路由到as/api/soap
这个soap端点加载一个类,该类包含我想通过soap公开的所有方法

namespace MyProject\Controller;

$view = new ViewModel();
$view->setTerminal(true);
$view->setTemplate('index');

$endpoint = new EndpointController();

 $server = new Server(
            null, array('uri' => 'http://api.infinity-mcm.co.uk/api/soap')
 );


$server->setObject($endpoint);

$server->handle();

包含所有功能的控制器是
namespace MyProject\Controller;
class EndpointController
{

    public function addSimpleProducts($products)
    {

    }

}

现在我想做的是从这个endpointcontroller内部访问我的产品模型。
所以我试过:
protected function getProductsTable()
{
    if (!$this->productsTable) {
        $sm = $this->getServiceLocator();
        $this->productsTable= $sm->get('MyProject\Model\ProductsTable');
    }
    return $this->productsTable;
}

当我运行此命令时,会得到一个致命错误,即endpointcontroller::getservicelocator()未定义。
我对Zend2很陌生,但在Zend1中,我觉得这是我发展过程中的一个很小的步骤,我已经到了解雇Zend2并返回Zend1,甚至切换到Symfony2的地步,在那里它的简单使用原则…
帮忙?

最佳答案

如果您希望您的控制器能够访问servicemanager,则需要将servicemanager插入其中。
在mvc系统中,这几乎是自动发生的,因为servicemanager用于创建控制器的实例。当您使用EndpointController创建new时,不会发生这种情况。
您要么需要通过mvc创建这个控制器,要么实例化并配置您自己的servicemanager实例并将其传递给EndpointController
或者,实例化依赖项,例如ProductTable并将它们设置到EndpointController中。

关于php - 如何从自己的库访问zend 2中的getServiceLocator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15341633/

10-11 14:46