2015-11-02 87 views
1
DELETE请求

我得到这个错误,当我点击删除项目链接:如何处理Laravel

MethodNotAllowedHttpException在RouteCollection.php行219:

在RouteCollection.php线219

在RouteCollection-> methodNotAllowed(阵列( '删除'))在RouteCollection.php线206

这是链接:

<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点18分四十秒)─ ─> php artisan route:列表

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

请补充完整路由列表 – davejal

+0

添加,请编辑 – vivoconunxino

+0

是否也能输入“PHP工匠路线”在您的COMAND行 – davejal

回答

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中,只有GETPOST请求。没有PUT,PATCHDELETE方法。 Laravel(某种意义上)通过添加一个名为_method的隐藏输入字段来“嘲笑”这些方法,该字段指定了这些方法。

由于HTML表单只支持POST和GET,所以PUT和DELETE方法将被欺骗,方法是自动向表单中添加一个_method隐藏字段。

来源:http://laravel.com/docs/4.2/html

+0

我编辑了一些说明。 :) –