我发现了如何获得这样的会话容器:$ session = new \ Zend \ Session \ Container('base');
但是,如果在处理HTTP请求期间需要在许多地方访问会话该怎么办?假设在IndexController中应用程序模块的indexAction中,然后将其重定向到User \ Controller \ IndexController并需要再次访问该会话,然后在一个或两个视图助手中,谁又知道多久一次。
每次重新构造会话容器时,这都是在浪费处理时间。是的,我调试了它以查看构造函数中发生的事情,是的,在幕后执行了一些代码。似乎构造函数不会只返回全局变量或其他不可变的且不需要构造过程的东西。
那么该怎么办?我应该为此创建服务吗?控制器插件?一个视图助手?服务,控制器插件和视图助手,后者调用该服务?
我确定这是很多人必须遇到并处理过的事情,但是我找不到任何信息。
非常感谢任何提示。提前谢谢了!:-)
这是一个更完善和改进的版本。它由服务“ SessionService”,一个ViewHelper(称为SessionService),一个ControllerPlugin(也称为SessionService)组成,并显示如何在配置文件“ module.config.php”中进行设置。
确保在配置中设置“使用”路径或使用绝对类路径。
SessionService.php:
class SessionService
{
protected $sessionContainer;
public function setSessionContainer(
$sessionContainer
) {
$this->sessionContainer = $sessionContainer;
}
public function __invoke() {
return $this->sessionContainer;
}
}
SessionHelper.php:
class SessionHelper extends \Zend\View\Helper\AbstractHelper
{
protected $sessionService;
public function setSessionService(
$sessionService
) {
$this->sessionService = $sessionService;
}
public function __invoke() {
return $this->sessionService;
}
}
SessionPlugin.php:
class SessionPlugin extends AbstractPlugin
{
protected $sessionService;
public function setSessionService(
$sessionService
) {
$this->sessionService = $sessionService;
}
public function __invoke() {
return $this->sessionService;
}
}
module.config.php:
'service_manager' => array(
'factories' => array(
'sessionService' => function(
ServiceLocatorInterface $serviceLocator
) {
$sessionContainer = new \Zend\Session\Container('base');
$sessionService = new SessionService();
$sessionService->setSessionContainer($sessionContainer);
return $sessionService;
},
),
),
'controller_plugins' => array(
'factories' => array(
'sessionPlugin' => function(
AbstractPluginManager $pluginManager
) {
$sessionService = $pluginManager->getServiceLocator()->get('sessionService');
$sessionPlugin = new SessionPlugin();
$sessionPlugin->setSessionService($sessionService);
return $sessionPlugin;
},
),
),
'view_helpers' => array(
'factories' => array(
'sessionHelper' => function (
AbstractPluginManager $helperPluginManager
) {
$sessionService = $helperPluginManager->getServiceLocator()->get('sessionService');
$sessionHelper = new SessionHelper();
$sessionHelper->setSessionService($sessionService);
return $sessionHelper;
},
),
),
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句