ZF2:将会话管理注入服务

时间:2014-09-17 14:15:34

标签: session dependency-injection zend-framework2

我熟悉如何在ZF2中使用Session,例如

        $user_session = new Container('user');
        $user_session->username = 'JohnDoe';

这很好,但如果我试图在我的一个业务逻辑服务中保存会话数据,我非常希望将会话管理对象/服务注入我的服务构造函数中,就像在这个伪代码中一样:

class BusinessSvc{
   protected $sessionSvc;

   function __construct($sessionSvc){
      $this->sessionSvc = $sessionSvc;
   }

   public function doBusinessLayerStuff(){
      ... do stuff ...
      $this->sessionSvc->store('lastOrderNumber', '1234');
      ... do stuff ...
   }
}

我认为该框架将提供此功能,但我无法在任何地方找到它。我总是可以写自己的,但不想重新发明轮子。

1 个答案:

答案 0 :(得分:2)

答案比我意识到的要简单得多。实例化后,可以将Container实例本身注入到业务服务中,并为其提供对会话的访问权限。如果使用phpunit稍后测试服务,则可以使用数组或ArrayObject实例模拟对象。

在Module.php的getServiceConfig方法中:

 'MyModule\Service\BusinessService' => function($sm) {
      // Container doesn't need to use this name but it seems sensible.
      $container = new Container('MyModule\Service\BusinessService');
      return new Service\BusinessService($container);
 },