zend framework 2 getServiceLocator为空

时间:2014-02-03 14:09:18

标签: php zend-framework2

我一直试图通过在线阅读并在此处应用大量答案来解决这个问题,但遗憾的是无济于事。

我的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等。我错在哪里?

谢谢, 安德烈

1 个答案:

答案 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
}