Как создать куки на уровне контроллера в CakePHP 3.5?
У меня проблемы с тем, чтобы заставить куки работать в cakephp 3.5.x.
в более ранних версиях я использовал компонент Cookie, но теперь это устарело. Мне неясно, как использовать этот новый промежуточный продукт для чтения и записи файлов cookie.
Документация для меня неясна. В нем показано, как настроить промежуточное программное обеспечение для файлов cookie, а не как создавать файлы cookie в контроллере. Есть ли кто-нибудь, кто обрабатывал куки в 3.5.x?
1 ответ
Промежуточное программное обеспечение заменяет только часть шифрования компонента 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')
]);
Смотрите также
Мой случай с использованием 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;
А затем чтение и запись файлов cookie в вашем действии контроллера - это легкий ветерок:
//Read
$fooVal = $this->Cookie->read('foo');
//Write
$this->Cookie->write('foo', 'bar');