gpt4 book ai didi

php - ZF2 getServiceLocator() 未找到?

转载 作者:可可西里 更新时间:2023-10-31 22:55:43 26 4
gpt4 key购买 nike

我这辈子都无法让 $this->getServiceLocator() 在我的 Controller 中工作。我已经阅读并尝试了一切。我猜我错过了什么??这是一些代码。

namespace Login\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\Session\Container as SessionContainer;
use Zend\Session\SessionManager;
use Zend\View\Model\ViewModel;
use Zend\Mvc\Controller;

use Login\Model\UserInfo;

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 或使用 Factory Pattern

注入(inject)它们

懒惰者

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

希望这是可以理解的;)

关于php - ZF2 getServiceLocator() 未找到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com