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

时间:2017-09-11 13:03:35

标签: cakephp cookies cakephp-3.0 middleware

我在Cakephp 3.5.x中运行cookie时遇到问题。

在早期版本中,我使用过Cookie组件,但现在不推荐使用它。我不清楚如何使用这种新的中间件来读写cookie。

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

2 个答案:

答案 0 :(得分: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')
]);

另见

答案 1 :(得分: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');