在 Laravel 中正确路由

Routing correctly in Laravel

我正在学习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();

    }
}

任何帮助将不胜感激。

我认为你在这里传递的 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' ]) !!}

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() !!}

你打错了url。

在您的 html 中,您正在使用

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

但是你的更新路径是

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

更改表单中的 URL,同时确保发出 POST 请求而不是 GET.

根据 restful 约定,更新资源应该有 PUT/PATCH 路由。

PS:当前laravel版本是7.x,我建议你至少学习laravel6.x,而HTML来自集体(就我记得的那样)已被弃用。您不应使用已弃用的技术。

将路线更改为:

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-method-spoofing