【发布时间】:2014-07-18 04:43:26
【问题描述】:
我怎样才能有一个方法,定义一次,在所有控制器中都可用?
在我的 UsersController 应用程序中,我有一个名为 getAuthService 的方法(它获取身份验证服务),但我也希望能够从其他控制器访问身份验证实例(这样我就可以访问它的存储)。下面是我在 UsersController 中的方法:
class UsersController {
protected $authService
.
.
.
protected function getAuthService() {
if (! $this->authService) {
$dbAdapter = $this->getServiceLocator()->get('\Zend\Db\Adapter\Adapter');
$dbTableAuthAdapter = new DbTableAuthAdapter($dbAdapter, 'users', 'email', 'password', 'MD5(?)');
$authService = new AuthenticationService();
$authService->setAdapter($dbTableAuthAdapter);
$this->authService = $authService;
}
return $this->authService;
}
}
.. 但是,除非我在其中复制方法,否则我无法在 ApplicationController 中访问它?我可以在其他地方定义这个方法吗?或者,另一种方式?
在 Rails 中,我会将此方法放入应用程序控制器中,因为其他控制器会从那里扩展。 Zend 方法是创建包含扩展 AbstractActionController 和其他控制器扩展的共享方法的控制器,还是从 Application\Controller\IndexController 扩展其他模块的控制器:
- Zend\Mvc\Controller\AbstractActionController (abstract)
- Application\Controller\IndexController (containing my getAuthService method)
- Users\Controller\UsersController (extends the above so getAuthService is available)
谢谢
【问题讨论】:
标签: zend-framework zend-framework2