【问题标题】:AngularJS PUT vs Symfony2 PUT method. Update doesn't workAngularJS PUT 与 Symfony2 PUT 方法。更新不起作用
【发布时间】:2014-05-27 13:58:35
【问题描述】:

我正在用 symfony2.4 和 angularjs 构建应用程序。在角度我创建了资源:

app.factory('Tasks', ['$resource', function($resource) {
    return $resource( 'api/tasks/:taskid', null,
         {
            'update': { method:'PUT' }
        });
}]);

当我尝试这样更新时:Tasks.update({ taskid : task.id },task);我收到此错误:

{"code":400,"message":"Validation Failed","errors":{"errors":["The CSRF token is invalid. Please try to resubmit the form."],"children":{"timeStart":{"children":{"date":[],"time":[]}},"timeStop":{"children":{"date":[],"time":[]}},"project":[],"descriptionTask":[],"isCompleted":[],"isVisible":[]}}}

当我在 symfony 中构建表单然后更新任何任务时 - 它可以工作。 但我注意到 AngularJS 不会通过 POST 发送任何数据。它通过 JSON 发送(?或者只是发送我给的这个对象),我认为这是问题所在。我该如何修复它?

【问题讨论】:

  • 您缺少 CSRF(防伪)令牌。
  • 怎么添加呢? :) 作为任务属性?

标签: javascript php angularjs symfony


【解决方案1】:

您需要在表单中添加_token,即

{{ form_row(form._token) }}

到目前为止,您的表单缺少 csrf 令牌字段,如果您使用 twig 表单函数来呈现您的表单,例如form(form),这将自动为您呈现 csrf 令牌字段,但您的代码显示您正在呈现您的表单使用 <form></form> 等表单的原始 html,那么您必须手动呈现该字段

或者在表单的结束标签前添加{{ form_rest(form) }}

根据文档

这会渲染给定的所有尚未渲染的字段 形式。始终将其放在表单中的某个地方是个好主意 因为它会为您呈现隐藏字段并制作您忘记的任何字段 渲染得更明显(因为它会为您渲染该字段)。

form_rest(view, variables)

@M Khalid Junaid 在The CSRF token is invalid. Please try to resubmit the form 中的回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多