В Laravel можно работать с сессиями пользователей с помощью двух инструментов. Первый - это класс
Request, второй - глобальная вспомогательная функция
session. Рассмотрим их.
Глобальная функция session
Глобальная функция session имеет меньше возможностей, чем методы класса Request. В основном они ограничиваются только получением и сохранением данных. Данные в сессии хранятся в виде ассоциативного массива. Доступ к ним происходит по ключу:
<?php
// сохранить данные в сессию:
session(['food' => 'cheese']);
// получить данные из сессии:
$value = session('food');
// при получении указать значение по умолчанию:
$value = session('food', 'milk');
?>
При указании второго параметра во время получения значение (по умолчанию), он будет возвращаться, если значения нет.
Методы для сессий из класса Request
В классе Request существует метод
session(). Он возвращает объект с сессией. Рассмотрим несколько методов, которые можно применять к этому объекту. К примеру, чтобы сохранить данные сессии, необходимо использовать метод
put, а для получения метод
get:
<?php
// сохранить данные в сессию:
$request->session()->put('food', 'cheese');
// получить данные из сессии:
$value = $request->session()->get('food');
// при получении указать значение по умолчанию:
$value = $request->session()->get('food', 'milk');
?>
Вместо значения по умолчанию (константы) можно поставить и функцию. Тогда она будет выполнена, если переменной сессии ещё не существует:
<?php
$value = $request->session()->get('food', function(){
return 'milk';
});
?>
Для работы с массивами внутри данных сессии существует метод
push(). Он добавляет новый элемент массив:
<?php
// сохранить массив в сессию:
$request->session()->put('food', array('cheese', 'bread'));
// добавляем элемент в массив:
$value = $request->session()->push('food', 'milk');
?>
Для удаления данных из сессии используются методы:
- forget() - удаляет данные по ключу
- pull() - удаляет данные по ключу и возвращает удаляемое значение (вторым параметром можно передать значение по умолчанию)
- flush() - удаляет вообще все данные сессии
Приведём примеры их вызова:
<?php
// удаляет данные по ключу "food":
$request->session()->forget('food');
// удаляет данные по ключу "food", возвращая сохранённые или "milk":
$value = $request->session()->pull('food', 'milk');
// удаляет вообще все данные сессии:
$value = $request->session()->flush();
?>
Последними рассмотрим три метода для получения значения из сессии, проверки существования и проверки наличия:
- all() - получает все данные из сессии
- exists() - вернет true, если переменная существует
- has() - вернет true, если переменная существует и не равна null
Методы проверки обычно используют в условных конструкциях:
<?php
// получает все данные сессии
$data = $request->session()->all();
if ($request-?>session()-?>exists('food')) {
// этот код выполнится, если "food" существует
}
if ($request-?>session()-?>has('food')) {
// этот код выполнится, если "food" существует и не равна null
}
?>