如何访问服务定位器对象ZF3控制器里面?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何访问服务定位器对象ZF3控制器里面?相关的知识,希望对你有一定的参考价值。
我试图访问我的控制器内部的服务定位对象,但无法做到这一点。
我试图联机帮助,但他们大多正在跟踪ZF2
方法
以前在zf2
服务定位器访问是一件轻而易举的,我只是做$这个 - > getServiceLocator();
我曾尝试创建我的控制器工厂类和创建的CreateService方法有,但它说我要实现__invoke()
方法了。
我的目标是做这样的事情
public function getPropertyTable()
{
if (!$this->PropertyTable) {
$sm = $this->getServiceLocator();
$this->PropertyTable = $sm->get('ApplicationModelPropertyTable');
}
return $this->PropertyTable;
}
谁能给我提供一个完整的步骤来实现这一目标?
我试图问这个问题之前,实现几乎所有涉及到的ServiceLocator的答案,所以请帮我这个标记作为复制或某件事之前,忽略了错别字
答案
谢谢大家告诉我,我做了错误的方式。 关于这个主题的一些更多的研究,帮助我让我的问题解决了 这里是我做了什么来解决这个问题
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
return new ListController($container->get(PropertyInterface::class));
}
在这里,我路过这是由我称为房产表另一个表中,我已经给身体为模型的所有我inteface功能实现PropertyInterface refrence
像searchProperty()'controllers' => [
'factories' => [
// Update the following line:
ControllerListController::class => FactoryListControllerFactory::class,
],
],
// Add this section:
'service_manager' => [
'aliases' => [
ModelPropertyInterface::class => ModelPropertyTable::class,
],
'factories' => [
ModelPropertyTable::class => InvokableFactory::class,
],
],
现在,唯一剩下的就是你的财产界面增加功能与实现属性表中的他们,然后叫他们在你的控制器
这 Complete Steps for implementation 帮我实施新的流动。 感谢社区。你所有的是最好的。
另一答案
只要在ZF3新工厂接口:
interface FactoryInterface
{
/**
* Create an object
*
* @param ContainerInterface $container
* @param string $requestedName
* @param null|array $options
* @return object
*/
public function __invoke(ContainerInterface $container, $requestedName, array $options = null);
}
你必须实现你的工厂这样。
为了帮助你,你可以使用link
编辑:
在实践中,你应该有这样的:
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$propertyTable = $container->get('ApplicationModelPropertyTable');
return new Controller($propertyTable);
}
另一答案
其他方式
/**
* Retrieve service manager instance
* @throws PsrContainerContainerExceptionInterface
* @throws PsrContainerNotFoundExceptionInterface
* @return ContainerInterface
*/
public function getServiceLocator()
{
return $this->getEvent()->getApplication()->getServiceManager();
}
另一答案
在ZF3不建议到服务定位器传递到控制器。你需要得到从$容器所有依赖内部控制的工厂和他们通入控制器通过构造函数(或setter方法)。
以上是关于如何访问服务定位器对象ZF3控制器里面?的主要内容,如果未能解决你的问题,请参考以下文章
ZF3 Doctrine Object 提供给 Escape 助手,但标志不允许递归