Обучение RESTful контроллеры в Laravel

BigBoss

Местный
Сообщения
135
Симпатии
156
Баллы
43
#1
Контроллеры ресурсов упрощают построение RESTful-контроллеров, работающих с ресурсами. Например, вы можете создать контроллер, работы с пользователями простой командной с флагом --resource.
Код:
php artisan make:controller UsersController --resource
Будет создан RESTful-контроллер и добавлен в загрузку.
После создания RESTful контролера в Laravel, вам нужно будет добавить его в маршруты следующей командой:
PHP:
Route::resource('users', 'UsersController');
Тем самым мы вызываем данный маршрут, о проверке и просмотре маршрутов можно прочитать в соседней теме (Инструкция - Проверка/Просмотр маршрутизации в Laravel)
При проверке маршрута, вы увидите следующее:
Тип Путь Действие Имя маршрута
GET /users index users.index
GET /users/create create users.create
POST /users store users.store
GET /users/{user} show users.show
GET /users/{user}/edit edit users.edit
PUT/PATCH /users/{user} update users.update
DELETE /users/{user} destroy users.destroy

Так как HTML-формы не способны работать с PUT/PATCH/DELETE вам необходимо добавить скрытое поле _method. При помощи помощника method_field, это можно реализовать без проблем следующим образом:
HTML:
{{ method_field('PUT') }}
для PATCH это будет выглядеть так:
HTML:
{{ method_field('PATCH') }}
ну и конечно же для DELETE, это будет выглядеть так:
HTML:
{{ method_field('DELETE') }}
Иногда необходимо обработать только часть действий, для этого можно применить один вариант:
1) Создание контроллера, с определенными действиями
2) Исключение в маршрутизации
Первый вариант можно выполнить следующим образом:
Код:
php artisan controller:make UsersController --only=index
Тем самым будет создан контроллер с действием только index, и будет иметь маршрут users.index
Код:
php artisan controller:make UsersController --except=index
Тем самым вы создадите контроллер с действиями create,store,show,edit,update,destroy.
Если вам необходимо создать контроллер только с определенными действием или исключить определенным действиями, вы можете указать через запятую и будет таким образом:
Код:
php artisan controller:make UsersController --only=index,create
Код:
php artisan controller:make UsersController --except=index,create
Вот так мы создали только с index,create или же исключили index,create.
Второй вариант, решается следующим образом:
PHP:
Route::resource('users', 'UsersController', array('only' => array('index')));
Тем самым мы работаем только с действием index.
PHP:
Route::resource('users', 'UsersController', array('except' => array('index')));
В данном варианте мы исключили index.
Если вам необходимо сделать для нескольких действий то делаем как и выше следующим образом:
PHP:
Route::resource('users', 'UsersController', array('only' => array('index', 'create')));
PHP:
Route::resource('users'', 'UsersController', array('except' => array('index', 'create')));
Так же вы можете переопределить имена маршрута передав массив names
PHP:
Route::resource('users', 'UsersController', array('names' => array('index' => 'photo.trata')));
Изменение передачи параметров маршрутов:
PHP:
Route::resource('users', 'AdminUsersController', ['parameters' => [
    'users' => 'admin_user'
]]);
Таким образом у вас будут передаваться администраторы следующим образом:
Код:
/users/{admin_user}
Для обработки контроллеров вложенных ресурсов необходимо использовать "точечную" нотацию:
Route::resource('users.comments', 'UsersCommentController');
Так же можно добавить дополнительные маршруты. Выше
PHP:
Route::resource('users', 'UsersController');
Необходимо добавить ваш дополнительный маршрут и будет выглядеть это следующим образом:
PHP:
Route::get('users/popular');
Route::resource('users', 'UsersController');
 
Вверх Снизу