laravel 5.2 RouteCollection.php第161行中的NotFoundHttpException

时间:2017-08-29 04:39:37

标签: php laravel laravel-5.2

这是关于堆栈溢出的非常常见的问题。我尝试了很少的但是那些不适用于我的场景。 我尝试将编辑数据集传递给数据库,但我得到了一个错误 RouteCollection.php第161行中的NotFoundHttpException edit.blade.php 中,我传递了 PUT 方法,但检查了Inspect,然后他们显示了请求方法:GET 。请帮助我

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');

3 个答案:

答案 0 :(得分:4)

由于HTML表单仅支持POST&amp;应该通过在表单中​​添加_method隐藏字段来欺骗GET方法,PUT和DELETE方法,如下所示:

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

您的routes.php文件似乎没有输入 / phonebook / update / {{ID}}

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

应该

答案 1 :(得分:2)

您需要将表单方法用作POST,因为您已在隐藏输入字段中指定了PUT。

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

答案 2 :(得分:1)

将表单更改为

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

您前往

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

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

有关NAMED ROUTES

的更多信息


更新: 或者,由于您使用的是RESOURCE控制器,因此甚至无需指定PUT路由。资源控制器alreday为您提供PUT路径

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

所以你也可以像这样改变你的形式

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

并从此路线中移除put

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

有关RESOURCE CONTROLLERS

的更多信息