我的模块中有两个 Controller ,它们两个都需要查看用户是否已登录。登录 Controller 使用DbTable对用户进行身份验证,并将身份写入存储。
我正在使用> Zend\Authentication\AuthenticationService; $ auth = new AuthenticationService();
在 Controller 函数内部,但随后我在多个pageAction()上实例化其实例
为此,我在Module.php中编写了一个函数
如下
public function getServiceConfig()
{
return array(
'factories' => array(
'Application\Config\DbAdapter' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
return $dbAdapter;
},
'Admin\Model\PagesTable' => function($sm){
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$pagesTable = new PagesTable(new TableGateway('pages',$dbAdapter) );
return $pagesTable;
},
'Admin\Authentication\Service' => function($sm){
return new AuthenticationService();
}
),
);
}
如您所见,每次我认为不好的时候,我都会返回新的AuthenticationService()。我找不到如何获取已实例化的服务实例,或者
我必须为此编写一个单例类。请告知任何带有更深入说明的示例代码片段,将受到高度重视并表示感谢。
最佳答案
尝试以下方法:
public function getServiceConfig()
{
return array(
'aliases' => array(
'Application\Config\DbAdapter' => 'Zend\Db\Adapter\Adapter',
'Admin\Authentication\Service' => 'Zend\Authentication\AuthenticationService',
),
'factories' => array(
'Admin\Model\PagesTable' => function ($serviceManager) {
$dbAdapter = $serviceManager->get('Application\Config\DbAdapter');
$tableGateway = new TableGateway('pages', $dbAdapter);
$pagesTable = new PagesTable($tableGateway);
return $pagesTable;
},
),
);
}
请注意,主要注意根数组的“别名”部分,所有其他更改都只是修饰,您可能更喜欢按照建议的原始方式进行操作(例如,使用工厂来检索Zend\Db\Adapter\Adapter实例,而不是使用别名作为别名)。也)。
亲切的问候,
伊势