如何在CakePHP 3.5中的控制器级别创建cookie?

问题描述 投票:3回答:2

我在让cookie在cakephp 3.5.x中工作时遇到问题。

在较早的版本中,我使用了Cookie组件,但是现在不建议使用。对我来说还不清楚如何使用这种新的中间件来读取和写入Cookie。

documentation对我来说不清楚。它向我展示了如何设置Cookie中间件,但没有说明如何在控制器中创建Cookie。是否有人在3.5.x中处理过cookie?

cakephp cookies cakephp-3.0 middleware
2个回答
5
投票

[中间件仅替换Cookie组件的加密部分(从根本上说,它始终是CakePHP 3.0的唯一工作,如果需要,它将自动加密和解密您配置的cookie。

您不使用中间件来读取或写入cookie,这是通过请求和响应对象完成的,这是CakePHP 3以来的默认设置。

从控制器动作中读取和写入cookie可以很简单:

$rememberMe = $this->request->getCookie('remember_me');
$this->response = $this->response->withCookie('remember_me', [
    'value' => 'yes',
    'path' => '/',
    'httpOnly' => true,
    'secure' => false,
    'expire' => strtotime('+1 year')
]);

另请参见


0
投票

我的案例使用Cake 3.8,以防万一有人迷失自己:

在您的beforeFilter中加载组件

public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    //Load components, like Cookie
    $this->loadComponent('Cookie', ['expires' => '30 day']);
}

如果蛋糕抱怨:

Argument 1 passed to App\Controller\PController::beforeFilter() must be an instance of App\Controller\Event, instance of Cake\Event\Event given

将以下内容添加到班级顶部:

use Cake\Event\Event;

然后在Controller动作中读取和写入Cookies轻而易举:

//Read
$fooVal = $this->Cookie->read('foo');
//Write
$this->Cookie->write('foo', 'bar');
© www.soinside.com 2019 - 2024. All rights reserved.