2017-08-29 146 views
2

这是堆栈溢出中非常常见的问题。我尝试了其中的几个,但这些都不适用于我的场景。 我试图通过编辑数据设置为数据库,但我得到了像RouteCollection.php线 NotFoundHttpException一个错误161edit.blade.php我通过PUT方法但检查检查那么他们有显示请求方法:GET。请帮我laravel 5.2 RouteFollection.php中的NotFoundHttpException第161行

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', '[email protected]'); 
Route::resource('phonebook', 'PhonebookController'); 

Route::put('phonebook/update','[email protected]'); 

回答

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', '[email protected]'); 
Route::resource('phonebook', 'PhonebookController'); 

Route::put('phonebook/update/{$id}','[email protected]')->name('phoneUpdate'); 

更多NAMED ROUTES


UPDATE: 或者,因为你使用的资源CONTRO ller,你甚至不需要指定PUT路由。资源控制器alreday为您提供

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

一个PUT路线所以,你也可以改变你的形式,这样

<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', '[email protected]'); 
Route::resource('phonebook', 'PhonebookController'); 

更多RESOURCE CONTROLLERS

+0

非常感谢你帮助我。这是工作 – Rika

+0

很高兴我能帮帮我 :) –

4

由于HTML表单只支持POST & GET方法,PUT和DELETE方法应该是通过添加_method隐藏字段来欺骗您的形式是这样的:

<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文件的文件似乎并没有对/电话簿/更新条目/ {{ID}}

Route::put('phonebook/update/{id}','[email protected]');

应该做的

+0

还是得到同样的错误要么。 – Rika

+0

检查更新。你的routes.php文件也需要改变。 –

+0

非常感谢你帮助我。改变后

id)}}”>然后工作。 – Rika

2

您需要使用窗体方法作为POST,因为您已在隐藏的输入字段中指定了PUT。

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

我这样做,但它不起作用 – Rika

+0

非常感谢你帮助我。改变后 id)}}”>然后工作 – Rika

相关问题