Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, POST Laravel 6

Я использую Laravel 6 для создания формы редактирования. По-видимому, это распространенная проблема, и я посмотрел здесь, как я могу ее решить, я попытался разместить скрытые поля csrf 5 способами, и каждый раз я запускаю с одной и той же ошибкой, поэтому IDK, если эти решения устарели для Laravel 6 или I что-то делаю не так.

edit.blade.php

<form method="POST" action="/posts/{{$post->edit}}" enctype="multipart/form-data">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <div class="form-group">
        <label for="exampleFormControlInput1">Email address</label>
        <input type="email" name="email" value="{{ $post->email }}" class="form-control"
               id="exampleFormControlInput1">
    </div>
    <div class="form-group">
        <label for="exampleFormControlInput1">Name</label>
        <input type="text" name="name" value="{{ $post->name }}" class="form-control"
               id="exampleFormControlInput2" placeholder="Name">
    </div>
    <label for="exampleFormControlInput1">Image</label>
    <div class="form-group row">
        <div class="col-sm-2">
            @if($post->image)
                <img class="img-fluid card-img-top" src="/images/{{ $post->image }}"/>
            @endif
        </div>
        <input type="file" name="image" value="{{ $post->image }}"
               id="exampleFormControlInput3">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

PostsController.php

    public function edit(Post $post)
    {
        return view ('posts.edit', compact('post'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Post $post)
    {
        $post->update($request->all());
        $post->name = $request->name;
        $post->email = $request->email;

        if(Input::hasFile('image')){
        $file = Input::file('image');
        $path = time().$file->getClientOriginalName();
        $destinationPath = public_path(). '/images/';
        $filename = time().$file->getClientOriginalName();
        $file->move($destinationPath, $filename);

       //then proceeded to save
       $post->image = $destinationPath.$filename;
       $post->save();
       }

       else
        $post->save();

    return redirect('posts.all');
    }

Мои маршруты, в случае необходимости

Route::resource('posts', 'PostsController');

Это другие способы, которыми я пытался написать поле csrf.

Способ 1:

{{ csrf_field() }}
<input type="hidden" name="_method" value="PUT">

Способ 2:

@csrf_field
{{ method_field('PUT') }}

Способ 3:

@csrf
{{ method_field('PATCH') }}

Способ 4:

@csrf
@method('PUT')

Все это приводит меня к одному и тому же сообщению об ошибке.


person FlowMafia    schedule 23.09.2019    source источник
comment
comment
@CaddyDZ Я проверил этот конкретный вопрос перед публикацией, у меня ничего не сработало   -  person FlowMafia    schedule 23.09.2019


Ответы (1)


попробуйте заменить это:

<form method="POST" action="/posts/{{$post->edit}}" 

с этим :

<form method="POST" action="{{ route('posts.update', [$post->id]) }}" 

Я думаю, что вы пытаетесь опубликовать сообщение на маршруте / posts / без каких-либо аргументов, поскольку $ post-> edit может не вернуть идентификатор сообщения :)

person Mathieu Ferre    schedule 23.09.2019
comment
Писал этот точный ответ xD, ты меня опередил - person Salim Djerbouh; 23.09.2019
comment
да, это было так, иди, почему он показывает это сообщение вместо чего-то вроде, что у меня нет переменной редактирования, определенной lmao - person FlowMafia; 23.09.2019