Сегодня мы рассмотрим возможности работы с маршрутами в Laravel. На этот раз, мы будем иметь дело с тем, как Laravel обрабатывает параметры маршрутов. Мы уже познакомились с маршрутизацией раньше и в этот раз рассмотрим более сложные сценарии.
Параметры пути
Laravel позволяет использовать параметры в наших URL. Это полезно, когда вы хотите создать путь с такими вещами, как подкатегория или определенный идентификатор (имя, id или любой другой параметр). Давайте рассмотрим различные способы использования таких параметров.
Получение базового параметра пути
В этом примере у нас будет маршрут для пользователей и мы будем получать из него идентификатор. Мы сделаем это двумя разными способами для имени и для идентификатора.
// получение уровня привлекательности щенка
Route::get('puppies/{cutelevel}', function($cutelevel)
{
return 'Этот щенок мил на ' . $cutelevel . ' из ' . $cutelevel;
});
// ИЛИ
// получения имени
Route::get('users/{name}', function($name)
{
return 'Имя пользователя - ' . $name;
});
Проверка уровня привлекательности: если теперь перейти по адресу http://example.com/puppies/5, в браузере отобразится Этот щенок мил на 5 из 5.
Проверка имени: если перейти по адресу http://example.com/users/chris, в браузере отобразится Имя пользователя — Chris.
Использование необязательных параметров
Для этого примера допустим, что у нас есть галерея фотографий. У нас также есть категории фотографий. Категория будет указываться в пути, иначе мы просто будем показывать все фотографии.
// указываемая категория
Route::get('gallery/{category?}', function($category)
{
// если категория задана, показываем её
// если нет, показываем всё
if ($category)
return 'Это ' . $category . ' раздел.';
else
return 'Это все фотографии.';
});
Проверка с указанием категории: если зайти на http://example.com/gallery/puppies, браузер покажет Это puppies раздел.
Проверка без указания категории: если зайти на http://example.com/gallery, браузер покажет Это все фотографии.
Параметры пути по умолчанию
Допустим, вы хотите, чтобы для пользователя всегда была выбрана категория. Тогда, если категория не выбрана, то по умолчанию будет автоматически выбираться, например, закаты.
// указываемая категория со значением по умолчанию
Route::get('gallery/{category?}', function($category = 'sunsets')
{
return 'Это категория ' . $category;
});
Проверяем без категории: если зайти на http://example.com/gallery, браузер покажет Это категория закаты.
Проверяем с категорией: если зайти на http://example.com/gallery/puppies, браузер покажет Это категория puppies.
Получение реальных данных
Итак, мы узнали основы параметров путей. Давайте поговорим об использовании их в реальной ситуации. Мы будем использовать пример галереи.
В реальности вы не захотите просто отображать сообщение, что пользователь видит категорию щенков (puppies). Ваш пользователь захочет увидеть этих щенков!
Допустим, вы уже настроили ваше приложение Laravel, миграции и базу данных. Мы можем использовать Eloquent для получения данных через параметры нашего пути.
Когда у вас уже есть модель Eloquent, вы можете запрашивать необходимую информацию из пути (конечно, ваше приложение будет становиться больше и вы захотите переместить эту логику в контроллер).
// получение категории галереи для просмотра
Route::get('gallery/{category?}', function($category) {
// получение содержимого галереи по категории
$gallery = Gallery::where('category', '=', $category);
// возвращение представления и отсылка в него данных галереи
return View::make('gallery')
->with('gallery', $gallery);
});
Заключение
Как видите, очень просто использовать параметры пути и Eloquent ORM для получения реальных данных и отправки их в шаблоны.
Смотрите также документацию о фильтрах для аутентификации и группах путей в качестве префикса для всех путей, а также раздел о параметрах маршрутов, чтобы делать больше таких вещей, как ограничения путей с использованием регулярных выражений и многие другие.