我熟悉如何在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 ...
}
}
我认为该框架将提供此功能,但我无法在任何地方找到它。我总是可以写自己的,但不想重新发明轮子。
答案 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);
},