会话对象在组件中不可用
Session object not available from Component
我收到以下错误:
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,这可能是因为我错过了对父构造函数的调用? IE。 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();
}
您 不必 调用父构造函数,但您通常想要调用它,这样您就可以获得它所做的任何配置。检查父构造函数的代码,查看它需要哪些参数,将您的参数配置为采用相同的参数,然后传递它们。例如,如果父项如下所示:
function __construct(Foo $foo) {
...
}
那么你想在你的class中做这样的事情:
function __construct(Foo $foo) {
parent::__construct($foo);
$this->otherClass = new OtherClass();
}
getRequest()
是控制器的方法,不是组件。您需要添加 getController
调用:
$name = $this->getController()->getRequest()->getSession()->read('myKey');
我收到以下错误:
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,这可能是因为我错过了对父构造函数的调用? IE。 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();
}
您 不必 调用父构造函数,但您通常想要调用它,这样您就可以获得它所做的任何配置。检查父构造函数的代码,查看它需要哪些参数,将您的参数配置为采用相同的参数,然后传递它们。例如,如果父项如下所示:
function __construct(Foo $foo) {
...
}
那么你想在你的class中做这样的事情:
function __construct(Foo $foo) {
parent::__construct($foo);
$this->otherClass = new OtherClass();
}
getRequest()
是控制器的方法,不是组件。您需要添加 getController
调用:
$name = $this->getController()->getRequest()->getSession()->read('myKey');