【问题标题】:Laravel 405 responseLaravel 405 响应
【发布时间】:2014-10-23 18:11:57
【问题描述】:

我正在尝试为我的应用创建一个update,但得到一个Status Code:405 Method Not Allowed 标头

这是我的backbone.js代码

UserModel = Backbone.Model.extend({
    url:'/user'
    ,initialize:function(attributes,options){
        this.fetch()

        this.set('isEmail',true)
        this.sync('update',this,{
            success:function(){
                console.log('sync',arguments)
            }
        })

    }
})

我的 routes.php 文件的相关部分

Route::resource('user','UserController');

我确实设置了一个带有更新方法的 UserContoller

public function update(){
    return 'x';
}

【问题讨论】:

    标签: rest backbone.js laravel


    【解决方案1】:

    问题在于您的 Web 服务器不支持 PUT(以及用于 RESTful 服务的其他 http 方法)

    Backbone.js 对此有特殊支持(使用所有 Web 服务器都支持的 POST 方法),您可以通过以下方式启用:

    Backbone.emulateHTTP = true;
    
    model.save();  // POST to "/collection/id", with "_method=PUT" + header.
    

    如果您想使用不支持 Backbone 的默认 REST/HTTP 方法的旧版 Web 服务器,您可以选择打开 Backbone.emulateHTTP。设置此选项将使用 HTTP POST 伪造 PUT、PATCH 和 DELETE 请求,使用 true 方法设置 X-HTTP-Method-Override 标头。如果 emulateJSON 也打开了,那么 true 方法将作为附加的 _method 参数传递。

    ServiceStack Backbone.Todos Delete 405 not allowed

    【讨论】:

      【解决方案2】:

      如果你在 Laravel 中使用资源控制器,更新方法需要一个 id 参数:

      public function update($id){ 
      
      } 
      

      还要检查您是否在模型上正确发送带有 id 的 PUT 请求。

      【讨论】:

      • 这本质上是问题所在。我不得不向 /user/{something} 发送请求 - 这有点愚蠢,因为我正在处理模型而不是集合并且 id 是无关紧要的。
      猜你喜欢
      • 2019-05-09
      • 2017-05-21
      • 1970-01-01
      • 2018-11-10
      • 2019-05-08
      • 1970-01-01
      • 2021-12-28
      • 2020-12-01
      • 2023-04-10
      相关资源
      最近更新 更多