点击删除项链接时出现此错误:
RouteCollection.php第219行中的MethodNotAllowedHttpException:
在RouteCollection.php第219行
在RouteCollection.php第206行的RouteCollection-> methodNotAllowed(数组(' DELETE'))
这是链接:
<a href="{{ url('cats/'.$cat->id.'/delete') }}">
<span class="glyphicon glyphicon-trash"></span>
Delete
</a>
这就是我试图在routes.php
处理它的方式:
Route::delete('cats/{cat}/delete', function(Furbook\Cat $cat){
$cat->delete();
return redirect('cats')->withSuccess('Cat has been deleted');
});
完成routes.php:
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return redirect('cats');
});
Route::get('cats', function () {
$cats = Furbook\Cat::All();
return view('cats.index')->with('cats',$cats);
});
Route::get('cats/create', function(){
return view('cats.create');
});
Route::post('cats', function(){
$cat = Furbook\Cat::create(Input::all());
return redirect('cats/'.$cat->id)->withSuccess('Cat has been created');
});
Route::get('cats/{id}', function ($id) {
$cat = Furbook\Cat::findOrNew($id);
return view('cats.show')->with('cat',$cat);
});
Route::get('cats/{cat}', function(Furbook\Cat $cat){
return view('cats.show')->with('cat',$cat);
});
Route::delete('cats/{cat}/delete', function(Furbook\Cat $cat){
$cat->delete();
return redirect('cats')->withSuccess('Cat has been deleted');
});
Route::get('about', function () {
return view('about')->with('number_of_cats',9000);
});
Route::get('cats/breeds/{name}', function ($name) {
$breed = Furbook\Breed::with('cats')
->whereName($name)
->first();
$cats = null;
if(isset($breed))
$cats=$breed->cats;
return view('cats.index')
->with('breed',$breed)
->with('cats',$cats);
});
└─(21时十八分40秒)──&GT; php artisan route:list
+--------+----------+--------------------+------+---------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------------+------+---------+------------+
| | GET|HEAD | / | | Closure | |
| | GET|HEAD | about | | Closure | |
| | POST | cats | | Closure | |
| | GET|HEAD | cats | | Closure | |
| | GET|HEAD | cats/breeds/{name} | | Closure | |
| | GET|HEAD | cats/create | | Closure | |
| | GET|HEAD | cats/{cat} | | Closure | |
| | DELETE | cats/{cat}/delete | | Closure | |
| | GET|HEAD | cats/{id} | | Closure | |
+--------+----------+--------------------+------+---------+------------+
答案 0 :(得分:5)
链接会向服务器发送GET
个请求,但您的路由需要DELETE
个请求。您需要执行以下操作才能发送DELETE
请求。
<form method="POST" action="{{ url('cats/'.$cat->id.'/delete') }}">
{{ csrf_field() }}
<input type="hidden" name="_method" value="DELETE">
<span class="glyphicon glyphicon-trash"></span>
<button type="submit">Delete</button>
</form>
在HTML中,只有GET
和POST
个请求。没有PUT
,PATCH
和DELETE
方法。 Laravel(在某种意义上)&#34;模拟&#34;这些方法通过添加一个名为_method
的隐藏输入字段来指定这些方法。
由于HTML表单只支持POST和GET,因此自动在表单中添加_method隐藏字段会欺骗PUT和DELETE方法。