在读取 cookie 时不在对象上下文中时使用 $this
Using $this when not in object context when reading cookies
我正在尝试读取 Component
中的 cookie,但在 Cookie
class?
中出现错误
Using $this when not in object context
CORE\src\Http\Cookie\Cookie.php:738
[![在此处输入图片描述][1]][1]
代码:
<?php
namespace WetKit\Controller\Component;
use Cake\Controller\Component;
use Cake\Controller\Component\AuthComponent;
use Cake\Core\Configure;
use Cake\I18n\I18n;
use Cake\I18n\Time;
use Cake\ORM\Entity;
use Cake\Utility\Text;
use Cake\Http\Cookie\Cookie;
use Cake\Http\Cookie\CookieCollection;
class WetKitComponent extends Component
{
public function init($configs = [])
{
...
debug(Cookie::read("wetkit.lang"));
...
}
...
}
编辑 2
使用以下代码:
$cookieInstance = new Cookie('test');
debug($cookieInstance->read("wetkit.lang"));
我得到:
Invalid data type, must be an array or \ArrayAccess instance.
InvalidArgumentException
Toggle Vendor Stack Frames
CORE\src\Utility\Hash.php:52
编辑 3
如果我像这样将请求传递给我的组件:
//Setting core values for project
$this->appData = $this->WetKit->init([
'request' => $this->request,
...
]);
然后,在我的组件中:
debug($configs['request']->getCookie('wetkit.lang'));
我不再收到错误,它会输出 null
。不确定这是否是一种有效的方法。
撇开不正确的代码使用不谈,组件可以访问它们所附加的控制器,从那里您可以获得请求对象,然后您可以从中读取 cookie。
$this->getController()->getRequest()->getCookie('wetkit.lang')
另见
我正在尝试读取 Component
中的 cookie,但在 Cookie
class?
Using $this when not in object context
CORE\src\Http\Cookie\Cookie.php:738
[![在此处输入图片描述][1]][1]
代码:
<?php
namespace WetKit\Controller\Component;
use Cake\Controller\Component;
use Cake\Controller\Component\AuthComponent;
use Cake\Core\Configure;
use Cake\I18n\I18n;
use Cake\I18n\Time;
use Cake\ORM\Entity;
use Cake\Utility\Text;
use Cake\Http\Cookie\Cookie;
use Cake\Http\Cookie\CookieCollection;
class WetKitComponent extends Component
{
public function init($configs = [])
{
...
debug(Cookie::read("wetkit.lang"));
...
}
...
}
编辑 2
使用以下代码:
$cookieInstance = new Cookie('test');
debug($cookieInstance->read("wetkit.lang"));
我得到:
Invalid data type, must be an array or \ArrayAccess instance.
InvalidArgumentException
Toggle Vendor Stack Frames
CORE\src\Utility\Hash.php:52
编辑 3
如果我像这样将请求传递给我的组件:
//Setting core values for project
$this->appData = $this->WetKit->init([
'request' => $this->request,
...
]);
然后,在我的组件中:
debug($configs['request']->getCookie('wetkit.lang'));
我不再收到错误,它会输出 null
。不确定这是否是一种有效的方法。
撇开不正确的代码使用不谈,组件可以访问它们所附加的控制器,从那里您可以获得请求对象,然后您可以从中读取 cookie。
$this->getController()->getRequest()->getCookie('wetkit.lang')
另见