我的应用程序中的大多数控制器都需要能够访问当前登录用户的“帐户”,因此我试图将其注入每个控制器类。这样做的方法似乎是为可以提供所有依赖项的控制器类创建一个抽象工厂。所以我用一个方法创建了工厂类:
public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
$controllerClassName = $requestedName.'Controller';
$controller = new $controllerClassName();
$account = $serviceLocator->get('Account');
$controller->setAccount($account);
return $controller;
}
但是该$serviceLocator->get('Account');
行给了我错误:
Zend\Mvc\Controller\ControllerManager::get 无法获取或创建 Account 实例
从控制器操作中调用$this->getServiceLocator()->get('Account')
工作正常,那么为什么这个调用不能从控制器工厂内工作呢?
或者有更好的方法来实现这一点吗?