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']);