Abizern
Abizern

Reputation: 31

How to update exsiting row in database in laravel5

I am new in laravel and I want to update an existing row in database,but when I click on send button in view (for example 127.0.0.1/laravel/public/Article/update/3 ) I encounter the following error:

MethodNotAllowedHttpException in RouteCollection.php line 201:

Here is my code

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

Upvotes: 1

Views: 744

Answers (1)

Kyle
Kyle

Reputation: 405

The easiest way to resolve routing issues with Laravel is to use 'artisan'.

http://laravel.com/docs/5.1/artisan

If you use this command:

php artisan route:list

You'll see every possible route and HTTP verb available for use. Your error is in the RouteCollection so you can always fix these issues by looking at your app/http/routes.php file.

You defined a route as follows:

Route::get('Article/update/{id}','ArticleController@update');

Then you call that route via your form as follows:

{!! Form::model($change ,['method'=>'patch' , 'url'=>['Article/update' , $change->id ]]) !!}

Your routes.php GET definition does not match your form's PATCH method, so you're getting a method not allowed exception because the PATCH route is not defined.

You need this line of code in your routes.php file:

Route::patch('article/update/{id}','ArticleController@update');

I would highly recommend using this instead of defining each method individually:

Route::resource('article', 'ArticleController');

Then run the following command again with artisan to see all routes created:

php artisan route:list

Upvotes: 4

Related Questions