我是laravel的新手,我想更新数据库中的现有行,但是当我点击视图中的发送按钮时(例如 127.0.0.1/laravel/public/Article/update/3 )我遇到以下错误:
RouteCollection.php第201行中的MethodNotAllowedHttpException:
这是我的代码
Route
Route::get('Article/edit/{id}','ArticleController@edit');
Route::get('Article/update/{id}','ArticleController@update');
ArticleController
public function edit($id)
{
$change = Article::find($id);
return view('edit',compact('change'));
}
public function Update($id, Request $request)
{
Article::update($request->all());
return redirect('Article');
}
Model
public $table = 'Article';
protected $fillable = ['title' , 'body'];
edit.blade.php
<h1>ویرایش بست {{$change->title}}</h1>
{!! Form::model($change ,['method'=>'patch' , 'url'=>['Article/update' , $change->id ]]) !!}
{!! Form::label('title','عنوان') !!}
{!! Form::text('title') !!}
<br>
{!! Form::label('body','متن') !!}
{!! Form::textarea('body') !!}
<br>
{!! Form::submit('send') !!}
{!! Form::close() !!}
@if($errors->any())
<ul class ='alert alert-danger'>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
答案 0 :(得分:4)
使用Laravel解决路由问题的最简单方法是使用&#39; artisan&#39;。
http://laravel.com/docs/5.1/artisan
如果您使用此命令:
php artisan route:list
您将看到每个可能的路由和HTTP动词可供使用。您的错误发生在RouteCollection中,因此您可以通过查看app/http/routes.php
文件来解决这些问题。
您按如下方式定义了路线:
Route::get('Article/update/{id}','ArticleController@update');
然后您通过表单呼叫该路线,如下所示:
{!! Form::model($change ,['method'=>'patch' , 'url'=>['Article/update' , $change->id ]]) !!}
您的routes.php
GET定义与您的表单的PATCH方法不匹配,因此您获得的方法不允许例外,因为未定义PATCH路由。
您需要routes.php
文件中的这行代码:
Route::patch('article/update/{id}','ArticleController@update');
我强烈建议使用它而不是单独定义每个方法:
Route::resource('article', 'ArticleController');
然后再与artisan一起运行以下命令以查看所有创建的路线:
php artisan route:list