PUT в API Laravel - PullRequest
       77

PUT в API Laravel

0 голосов
/ 07 июня 2018

Я изучаю api rest с помощью laravel, я смог реализовать все методы, кроме PUT.Хотя маршруты и контроллеры правильно настроены, ответ на запрос с использованием метода PUT выглядит так: «laravel put Извините, искомая страница не найдена.», Как сейчас image .

вот код метода в контроллере в app / Http / Controllers / LivroController.php:

public function store(Request $request)  {

$livro = $request->isMethod('put') ? Livro::findOrFail($request->livro_id) : new Livro;

$livro->id = $request->input('livro_id');
$livro->nome = $request->input('nome');
$livro->descricao = $request->input('descricao');
$livro->user_id =  1; //$request->user()->id;

if($livro->save()) {
  return new LivroResource($livro);
}}

вот код маршрута в /routes/api.php:

Route::put('livro', 'LivroController@store');

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Если вы хотите создать новые данные, вы должны использовать метод post,

Route::post('livro', 'LivroController@store');

public function store(Request $request)  {

Если вы хотите обновить существующие данные, вы должны использовать метод put,

Route::put('livro/{id}', 'LivroController@update');

public function update(Request $request, $id)  {

Вы можетеиспользуйте этот пакет https://github.com/durmus-aydogdu/laravel-resource для остальных звонков.Этот пакет легко настраивается для отдыха и вызовов ресурсов.

0 голосов
/ 08 июня 2018

Лучше всего использовать ресурсы типа контроллеров и для этого случая метод put.Также вам следует подтвердить запрос.Например:

public function update(Request $request, $id)
{

  $livro = Livro::findOrFail($id);
  $validator = Validator::make($request->all(), [
    'livro_id' => 'required',
    'nome' => 'required',
    'descricao' => 'required',
  ]);
  if ($validator->fails()) {
    return response()->json(['errors'=>$validator->messages()],Response::HTTP_UNPROCESSABLE_ENTITY);
  }else{
    $livo->update($request->all());
    return response()->json(['livro'=>$livro], Response::HTTP_OK);
  }

}
0 голосов
/ 08 июня 2018

измените ваш метод почтальона на POST, а затем добавьте новый параметр в вашем теле:

"_method" : PUT

Это потому, что формы HTML не поддерживают действия PUT, PATCH или DELETE.Таким образом, при определении маршрутов PUT, PATCH или DELETE, которые вызываются из формы HTML, вам необходимо добавить скрытое поле _method в форму

...