我一直试图通过在线阅读并在此处应用大量答案来解决这个问题,但遗憾的是无济于事。
我的zf2应用程序上有两个模块,一个名为Services,另一个名为Agent。 现在,在我的服务模块中,一切似乎都运行正常,我可以得到我的serviceLocator,因此我的配置,并使用它。然而,在我的代理模块的控制器中,我似乎无法做同样的事情。
这是我的AgentController的一部分:
use Zend\Mvc\Controller\AbstractActionController;
class AgentController extends AbstractActionController
{
protected $serviceLocator;
public function ValidateAction()
{
$this->serviceLocator = $this->getServiceLocator()->get('config');
//... Using the config
}
}
在我的module.cofig.php中,我有以下内容:
'controllers' => array(
'invokables' => array(
'Agent\Controller\Agent' => 'Agent\Controller\AgentController',
),
),
我尝试了很多解决方案:更改和添加方法到Module.php,更改module.config等。我错在哪里?
谢谢, 安德烈
答案 0 :(得分:3)
控制器类使用类变量$this->serviceLocator
来保存服务定位器实例。在您的示例中,您将配置数组分配给此变量(从而将服务定位器实例替换为数组)。对$this->getServiceLocator()
的后续调用将返回配置数组而不是服务定位器对象,这可能是您获得错误的原因。
我建议使用局部变量:
public function ValidateAction()
{
$config = $this->getServiceLocator()->get('config');
//... Using the config
}
或分配给具有不同名称的类变量:
public function ValidateAction()
{
$this->config = $this->getServiceLocator()->get('config');
//... Using the config
}