Для определения маршрута в качестве ресурса с ресурсом Route::resource
, документы указывают:
Verb Path Action Route Name ------------------------------------------------------------------- GET /resource index resource.index GET /resource/create create resource.create POST /resource store resource.store GET /resource/{resource} show resource.show GET /resource/{resource}/edit edit resource.edit PUT/PATCH /resource/{resource} update resource.update DELETE /resource/{resource} destroy resource.destroy
в соответствии с типичным REST CRUD, поэтому PUT / PATCH используется для действий обновления и DELETE для уничтожения действий. Я бы подумал, что он предназначен для определения типичного взаимодействия ресурсов, даже если вручную определять мои собственные маршруты и действия контроллера.
Вот суть того, что я понимаю об этих взаимодействиях с Laravel:
Route::put
и DELETE с помощью Route::delete.
Input
фасад использует Illuminate\Http\Request::input
типизирующие взаимодействия и вернет json_decode
содержимого для json, все параметры GET для запросов GET или все параметры POST в противном случае. Мы должны использовать json или вообще не использовать PUT или DELETE вообще (отлично, потому что запросы HTTP PUT и DELETE не поддерживаются повсеместно). _method
в данных, так что маршрутизация может обеспечивать соблюдение глаголов . Являются ли PUT и DELETE исключительно там, чтобы создавать API-интерфейсы REST, доступные извне, или они служат другой цели? Есть ли какая-то польза от маршрутизации к одному и тому же URI с другой конечной точкой, обеспечивающей наличие _method
в $_POST
или json?
PUT и DELETE должны быть идемпотентными, но разве это даже реализовано в Laravel? Это что-то, что я должен совершить в своих контроллерах, или же такая маршрутизация навязывает это так или иначе?
По сути, если PUT и DELETE в Laravel функционально идентичны POST, кроме семантики REST и параллельной маршрутизации, когда и почему я должен использовать их через POST?
Вы используете метод PUT
когда хотите обновить запись, и вы используете метод DELETE
когда хотите удалить запись.
Обратите внимание, что в находчивом контроллере оба метода PUT
и DELETE
направлены на один и тот же url (resource/{resource})
, поэтому, если вы не различаете метод с PUT
или DELETE
, это будет проблемой.