微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我一直在收到Not Found或Token mismatch错误.

我的控制器:

class TranslationController extends Controller
{
    public function destroy($id)
    {       
        //$id = 1;
        /*$translation = Translation::find($id);
        $translation->delete();*/
    }
    ....
}

Ajax调用

/* Delete given translation */
    var url = "translation";
    var id = 1; 

    $.ajax({
        method: 'DELETE',url: url + '/' + id,// data: {'id': id,'_token': token},success: function() {

        }
    });

这将给出VerifyCsrftoken.PHP第53行中的TokenMismatchException:

如果我尝试:

url: url + '/' + id,data: {'_token': token},// token is equal to csrf_token

我有:Controller.PHP第269行中的NotFoundHttpException:

路线:

Route::controller('translation','TranslationController');

否则我使用的是Laravel 5认中间件,我没有改变任何与csrf相关的内容.

解决方法

NotFoundHttpException意味着没有指定具有特定HTTP谓词的特定请求的路由,或者错误地实现了映射到路由的动词的动作(即控制器方法).

既然你在帖子中提到过TranslationController定义为@L_404_0@,

Route::controller('translation','TranslationController');

从您发布的控制器代码中,很明显您没有在控制器TranslationController中为destroy方法定义动词.

如果您使用终端/命令行界面在项目根目录中执行PHP artisan route:list,您将看到已注册HTTP谓词的列表,映射到相应的URI以及操作.

要在隐式控制器中定义特定方法,动词(GET,PUT,POST,DELETE)应位于实际函数名称之前.
确保destroy方法在控制器中看起来如下所示:

public function deleteDestroy($id){  
   //delete logic for the resource
}

注意:
Laravel认情况下要求csrf标记与特定的RESTful请求一起传递,因此不要从AJAX调用删除数据:{‘_ token’:token}.

更新

忘了提到你的AJAX调用中的url也应该更改为以下代码才能工作,因为这是Laravel的隐式控制器为DELETE请求定义路由的方式:

var url = "translation/destroy";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐