php – 找不到ZF2 getServiceLocator()?
发布时间:2020-12-13 17:25:11 所属栏目:PHP教程 来源:网络整理
导读:我不能为我的生活得到$this- getServiceLocator()在我的控制器中工作.我已经阅读并尝试了一切.我猜我错过了什么?这是一些代码. namespace LoginController;use ZendMvcControllerAbstractActionController;use ZendSessionContainer as SessionContai
我不能为我的生活得到$this-> getServiceLocator()在我的控制器中工作.我已经阅读并尝试了一切.我猜我错过了什么?这是一些代码.
namespace LoginController; use ZendMvcControllerAbstractActionController; use ZendSessionContainer as SessionContainer; use ZendSessionSessionManager; use ZendViewModelViewModel; use ZendMvcController; use LoginModelUserInfo; class LoginController extends AbstractActionController { private $db; public function __construct() { $sm = $this->getServiceLocator(); $this->db = $sm->get('db'); } ... 我得到的错误是: Fatal error: Call to a member function get() on a non-object in /product/WishList/module/Login/src/Login/Controller/LoginController.php on line 21 解决方法
让我的评论更具意义. ServiceLocator(或者更确切地说,所有ControllerPlugins)仅在Controller的生命周期的稍后时间点可用.
如果您希望分配一个可以在整个动作中轻松使用的变量,我建议使用Lazy-Getters或使用工厂模式注入它们 懒惰干将 class MyController extends AbstractActionController { protected $db; public function getDb() { if (!$this->db) { $this->db = $this->getServiceLocator()->get('db'); } return $this->db; } } 工厂模式 //Module#getControllerConfig() return array( 'factories' => array( 'MyController' => function($controllerManager) { $serviceManager = $controllerManager->getServiceLocator(); return new MyController($serviceManager->get('db')); } )); //class MyController public function __construct(DbInterface $db) { $this->db = $db; } 希望这是可以理解的;) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |