cakephp 组件中没有会话对象

g2ieeal7  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(121)

出现以下错误:
Call to undefined method App\Controller\Component\MyCustomComponent::getRequest()
根据有关使用Sessions的文档,我应该能够从Components调用getRequest()https://book.cakephp.org/3/en/development/sessions.html
编码

class SomethingController extends AppController
{

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('MyCustom');
    }
    public function view($id = null)
    {
        $this->MyCustom->someMethodHere();
    }
}

class MyCustomComponent extends Component
{

    function __construct() {
        $this->otherClass = new OtherClass();
    }
    ...
    // Prior to 3.6.0 use session() instead.
    $name = $this->getRequest()->getSession()->read('myKey');

}

纠正此错误的最佳方法是什么?IIRC,这可能是由于我错过了对父构造器的调用?即parent::__contruct()

class MyCustomComponent extends Component
{

    function __construct() {
        //parent::__construct(); intellisence indicates I'm missing parameters
        $this->otherClass = new OtherClass();
    }
    ...
    // Prior to 3.6.0 use session() instead.
    $name = $this->getRequest()->getSession()->read('myKey');

}

编辑#1

父构造函数看起来如下所示:
public function __construct(ComponentRegistry $registry, array $config = []) { }
我像这样修改了代码,但错误仍然存在:

...
use Cake\Controller\ComponentRegistry;

...

function __construct(ComponentRegistry $registry, array $config = []) {
    parent::__construct($registry, $config);
    $this->otherClass = new OtherClass();
}

编辑#2

我尝试了initialize方法而不是__construct方法,但是得到了相同的结果:

function initialize(array $config)
{
    parent::initialize($config);
    $this->otherClass = new OtherClass();
}
ee7vknir

ee7vknir1#

getRequest()是控制器的方法,而不是组件的方法,您需要添加getController调用:

$name = $this->getController()->getRequest()->getSession()->read('myKey');
cyej8jka

cyej8jka2#

你不一定要调用父构造函数,但你通常会想这样做,这样你就可以得到它所做的任何配置。检查父构造函数的代码,看看它使用什么参数,配置你的构造函数使用相同的参数,然后传递它们。例如,如果父构造函数看起来像这样:

function __construct(Foo $foo) {
    ...
}

然后你想在你的课堂上做这样的事情:

function __construct(Foo $foo) {
    parent::__construct($foo);
    $this->otherClass = new OtherClass();
}

相关问题