Lab / YII

Yii2: Шпаргалка по работе к куками

Yii фреймворк предоставляет нам свой собственный инструмент для работы с куками который как и прочие его инструменты облегчает нам жизнь. В этой короткой заметке я приведу примеры работы с куками в Yii2.

Хочу обратить отдельное внимание на интересный факт, все значения отправляемые через компоненты request и response подписываются чекретным ключом, таким образом защищая их от изменения на стороне пользователя. В случае подмены куки на стороне клиента, они просто не будут приниматься в компоненте request.

Для начала создаём переменную в которую передаём объект response в котором фреймфорк использует свойство куки:

$cookies = Yii::$app->response->cookies;

Для записи в куки используется немного необычная конструкция, для начала мы создаём объект, и потом передаём в него массив, вот так:

$cookies->add(new \yii\web\Cookie([
 'name' => 'name',
 'value' => $name
]));

Примеры получения куков в запросе:

// Получить массив куков (yii\web\CookieCollection) из компонента "request"
$cookies = Yii::$app->request->cookies;
// Получаем значение "language" из куки. Если такой куки нет, возвращает "en" заданное по умолчанию.
$language = $cookies->getValue('language', 'en');
// Альтернативный способ получить куку "language"
if (($cookie = $cookies->get('language')) !== null) {
 $language = $cookie->value;
}
// Вы можете также использовать $cookies в качестве массива
if (isset($cookies['language'])) {
 $language = $cookies['language']->value;
}
// Проверить существование куки "language"
if ($cookies->has('language')) ...
if (isset($cookies['language'])) ...

Пример отправки данных в куки

// Получить массив куков (yii\web\CookieCollection) из компонента "response"
$cookies = Yii::$app->response->cookies;
// Добавить новую куку в response для отправки
$cookies->add(new \yii\web\Cookie([
 'name' => 'language',
 'value' => 'zh-CN',
]));
// Удаление куки
$cookies->remove('language');
// Эквивалентно процедурному стилю
unset($cookies['language']);