Laravel:无法创建正确的DELETE操作请求

ren*_*thy 6 ajax laravel-5

无法在Laravel中创建删除操作.

我一直在收Not FoundToken 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相关的内容.

Ahm*_*eri 4

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)