HTTP-методы в роутинге
HTTP определяет методы, каждый из которых означает тип действия над ресурсом.
Основные методы
- GET — получить данные, не меняет состояние
- POST — создать ресурс
- PUT — обновить ресурс целиком
- PATCH — обновить часть ресурса
- DELETE — удалить ресурс
- OPTIONS — узнать поддерживаемые методы
- HEAD — как GET, но без тела ответа
Регистрация в Laravel
Route::get('/posts', fn () => 'Список постов');
Route::post('/posts', fn () => 'Создание поста');
Route::put('/posts/{id}', fn ($id) => "Обновление поста {$id}");
Route::patch('/posts/{id}', fn ($id) => "Частичное обновление {$id}");
Route::delete('/posts/{id}', fn ($id) => "Удаление поста {$id}");
Несколько методов на один URL
Route::match(['get', 'post'], '/form', function () {
// обрабатывает и GET, и POST
});
Любой метод
Route::any('/webhook', function () {
// реагирует на любой HTTP-метод
});
REST и CRUD
REST-архитектура сопоставляет HTTP-методы с CRUD-операциями:
| Метод | Операция | Пример |
|---|---|---|
| GET | Read | Список постов |
| POST | Create | Создание поста |
| GET | Read | Просмотр поста |
| PUT/PATCH | Update | Обновление |
| DELETE | Delete | Удаление |
Именно этот принцип лежит в основе Route::resource.
Метод в запросе
Laravel может определить метод через скрытое поле _method в HTML-формах:
<form method="POST" action="/posts/5">
@csrf
@method('PUT')
<!-- поля -->
</form>
Директива @method создаёт скрытое поле _method=PUT, потому что HTML-формы поддерживают только GET и POST.