无法在Laravel中创建删除操作.
我一直在收Not Found或Token mismatch错.
我的控制器:
class TranslationController extends Controller
{
public function destroy($id)
{
//$id = 1;
/*$translation = Translation::find($id);
$translation->delete();*/
}
....
}
Run Code Online (Sandbox Code Playgroud)
Ajax调用:
/* Delete given translation */
var url = "translation";
var id = 1;
$.ajax({
method: 'DELETE',
url: url + '/' + id,
// data: {'id': id, '_token': token},
success: function() {
}
});
Run Code Online (Sandbox Code Playgroud)
这会给: TokenMismatchException in VerifyCsrfToken.php line 53:
如果我尝试:
url: url + '/' + id,
data: {'_token': token}, // token is equal to csrf_token
Run Code Online (Sandbox Code Playgroud)
我有: NotFoundHttpException in Controller.php line 269:
路线:
Route::controller('translation', 'TranslationController');
Run Code Online (Sandbox Code Playgroud)
否则我使用的是Laravel 5默认中间件,我没有改变任何与csrf相关的内容.
NotFoundHttpException意味着没有指定具有特定HTTP动词的特定请求的路由,或者映射到该路由的动词的操作(即控制器方法)被错误地实现。
由于您在帖子中提到 被TranslationController定义为隐式控制器,
Route::controller('translation', 'TranslationController');
Run Code Online (Sandbox Code Playgroud)
从您发布的控制器代码来看,很明显您没有在控制器中定义方法的动词。destroyTranslationController
如果您使用php artisan route:list终端/命令行界面在项目根目录中执行 a,您将看到已注册的 HTTP 动词的列表,映射到相应的 URI 以及操作。
要在隐式控制器中定义特定方法,动词( GET, PUT, POST, DELETE) 应位于实际函数名称之前。确保destroy控制器中的方法如下所示:
public function deleteDestroy($id){
//delete logic for the resource
}
Run Code Online (Sandbox Code Playgroud)
注意:
Laravel 默认情况下要求令牌csrf与特定的 RESTful 请求一起传递,因此不要data: {'_token': token}从您的AJAX调用中删除。
忘记提及,url您的 AJAX 调用中的 也应该更改为以下内容才能工作,因为这是 Laravel 的隐式控制器定义请求路由的方式DELETE:
var url = "translation/destroy";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |