如何在laravel5中更新数据库中的现有行

时间:2015-07-23 21:38:59

标签: php laravel-5

我是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

1 个答案:

答案 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