我在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/