Правильная маршрутизация в Laravel - PullRequest
0 голосов
/ 25 марта 2020

Я учусь Laravel 5.7.15.

Я пытаюсь обновить данные в Laravel. Когда я обновляю комментарий клиента, я получаю MethodNotAllowedHttpException.

Я уже просматривал другие сообщения, связанные с этой ошибкой, но все еще сейчас исправляю ее, пожалуйста, помогите мне.

Laravel сводит меня с ума.

Вот мой html

{!! Form::open(['url' => '/client_report/'.$id.'/edit', 'class' => 'form-horizontal group-border-dashed col-lg-6' ]) !!}
{{ csrf_field() }}
<div class="form-group">
{{Form::text("Comment",$client->client_comments, array('id'=>'comment' 'class' => 'form-control', 'disabled' => 'disabled', 'placeholder'=>'Client Comments')) }}
<p>{{Form::submit('Submit',['class'=>'btn btn-space btn-success'}}</p>
</div>

, и у маршрута есть

Route::get('/client_report/{id}/{edit}',function($id) {
    return view('clientEdit')
        ->with('id',$id);
})->middleware('auth');


Route::post('/client/submit/{id}/edit', ['uses' => 'clientController@editClient']);

, и у контроллера есть

class clientController extends Controller {
function editClient(Request $request, $id) {
        $client = Client::find($id);
            $client->comment = $request->get('comment');
            $client->save();

    }
}

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 25 марта 2020

Измените маршрут на:

Route::match(['put', 'patch'], '/client/submit/{id}', 'clientController@editClient');

И в форме:

{!! Form::open(['url' => '/client_report/'.$id, 'class' => 'form-horizontal group-border-dashed col-lg-6' ]) !!}
{{ csrf_field() }}
@method('PUT')

...

https://laravel.com/docs/master/routing#form -метод-спуфинг

0 голосов
/ 25 марта 2020

01. сначала измените свой метод маршрутизатора на PUT

Route::put('/client/submit/update/{id}', ['uses' => 'clientController@editClient']);

02. измени свою форму

{!! Form::open(['action' => ['clientController@editClient',  $id ],'method' => 'POST', 'class' => 'form-horizontal group-border-dashed col-lg-6' ]) !!}
   {{Form::text("Comment",$client->client_comments, array('id'=>'comment' 'class' => 'form-control', 'disabled' => 'disabled', 'placeholder'=>'Client Comments')) }}
   {{ Form::hidden('_method', 'PUT')}}
   {{ Form::submit('submit', [ 'class' => 'btn btn-primary m-t-15 m-b-15'])}}
{!! Form::close() !!}
0 голосов
/ 25 марта 2020

Вы попали не по адресу.

В вашем html вы используете

Form::open(['url' => '/client_report/'.$id.'/edit' ... 

Но ваш маршрут обновления:

Route::post('/client/submit/{id}/edit' ...

Измените URL в вашей форме, также убедитесь, что вы сделали POST запрос вместо GET .

Обновление ресурса должно иметь маршрут PUT / PATCH в соответствии с соглашением о состоянии отдыха.

PS: текущий laravel версия 7.x, я бы порекомендовал вам выучить, по крайней мере, laravel 6.x, а HTML из Коллективов (насколько я помню, так они называются) устарели. Вы не должны использовать устаревшую технологию.

0 голосов
/ 25 марта 2020

Я думаю, что URL, который вы передаете здесь, неправильный.

{!! Form::open(['url' => '/client_report/'.$id.'/edit', 'class' => 'form-horizontal group-border-dashed col-lg-6' ]) !!}

Этот метод выше для редактирования, при нажатии на кнопку отправки он должен перенаправить на /client/submit/{id}/edit этот URL.

Создайте URL, как показано ниже.

{!! Form::open(['url' => '/client/submit/'.$id.'/edit', 'class' => 'form-horizontal group-border-dashed col-lg-6' ]) !!}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...