加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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;
}

希望这是可以理解的;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读