Rika
Rika

Reputation: 353

laravel 5.2 NotFoundHttpException in RouteCollection.php line 161

This is very common question on stack overflow.I tried few of them but those not work for my scenario. I try to pass edit data set to database but i got a error like NotFoundHttpException in RouteCollection.php line 161 In edit.blade.php i pass PUT method but check Inspect then their has show Request Method:GET.Please help me

edit.blade.php

<html>
<body>
    <form method="PUT" action="{{ URL::to('phonebook/update/$data->id') }}" >
        <input type="text" hidden name="id" value="{{$data->id}}"/>
        <input type="text" name="phoneNo" value="{{$data->phoneNo}}"/>
        <input type="text" name="email" value="{{$data->email}}" />
        <input type="hidden" name="_method" value="PUT"/>
        <input type="submit" value="Save"/>
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
    </form>

</body>

PhonebookController.php

  public function edit($id)
{
    $data = Phonebooks::find($id);
    return view('phonebook.edit', compact('data'));
}

public function update(Request $request, $id)
{
   echo"test";
}

routes.php

Route::resource('student', 'StudentController');
Route::post('phonebook', 'PhonebookController@store');
Route::resource('phonebook', 'PhonebookController');

Route::put('phonebook/update','PhonebookController@update');

Upvotes: 2

Views: 481

Answers (3)

Sreejith BS
Sreejith BS

Reputation: 1203

Change your form to

<html>
<body>
<form method="POST" action="{{ route('phoneUpdate', $data->id ) }}" >
    {{ method_field('PUT') }}
    {{ csrf_field() }}
    <input type="text" name="phoneNo" value="{{$data->phoneNo}}"/>
    <input type="text" name="email" value="{{$data->email}}" />
    <input type="submit" value="Save"/>
</form>
</body>

your route to

Route::resource('student', 'StudentController');
Route::post('phonebook', 'PhonebookController@store');
Route::resource('phonebook', 'PhonebookController');

Route::put('phonebook/update/{$id}','PhonebookController@update')->name('phoneUpdate');

More about NAMED ROUTES


UPDATE: Or, since you are using RESOURCE controller, you don't even need to specify that PUT route. Resource controller alreday provides you a PUT route with

path - phonebook/{$id}
route name - phonebook.update

So you could also change your form like this

<html>
<body>
<form method="POST" action="{{ route('phonebook.update', $data->id ) }}" >
    {{ method_field('PUT') }}
    {{ csrf_field() }}
    <input type="text" name="phoneNo" value="{{$data->phoneNo}}"/>
    <input type="text" name="email" value="{{$data->email}}" />
    <input type="submit" value="Save"/>
</form>
</body>

and remove that put from route like this :

Route::resource('student', 'StudentController');
Route::post('phonebook', 'PhonebookController@store');
Route::resource('phonebook', 'PhonebookController');

More about RESOURCE CONTROLLERS

Upvotes: 1

Maulik
Maulik

Reputation: 2991

Since HTML forms only support POST & GET methods, PUT and DELETE methods should be spoofed by adding a _method hidden field to your form like this:

<html>
<body>
    <form method="POST" action="{{ URL::to('phonebook/update/$data->id') }}" >
        <input name="_method" type="hidden" value="PUT">
        <input `enter code here`type="text" hidden name="id" value="{{$data->id}}"/>
        <input type="text" name="phoneNo" value="{{$data->phoneNo}}"/>
        <input type="text" name="email" value="{{$data->email}}" />
        <input type="hidden" name="_method" value="PUT"/>
        <input type="submit" value="Save"/>
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
    </form>

</body>

also your routes.php file don't seem to have entry for /phonebook/update/{{ID}}

Route::put('phonebook/update/{id}','PhonebookController@update');

should do

Upvotes: 4

sazanrjb
sazanrjb

Reputation: 138

You need to use form method as POST as you have specified PUT in hidden input field.

<form method="POST" action="{{ URL::to('phonebook/update/$data->id') }}" >

Upvotes: 2

Related Questions