2014-08-29 96 views
0

我試圖讓一個update到我的應用程序,但得到一個Status Code:405 Method Not AllowedLaravel 405響應

這裏是我的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'; 
} 

回答

1

如果使用Laravel資源控制器,更新方法需要一個ID參數:

public function update($id){ 

} 

還要檢查,如果你用的識別碼發送正確的PUT請求模型。

+0

這實際上是這個問題。我不得不向/ user/{something}發送一個請求 - 這有點傻,因爲我正在處理模型而不是集合,而id是無關緊要的。 – 2014-08-30 20:30:02

0

的問題是在你的Web服務器不支持(用於RESTful服務和其他HTTP方法)PUT

Backbone.js有(其中所有Web服務器都支持使用POST方法),這個特殊的支持,這你可以實現與:

Backbone.emulateHTTP = true; 

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

如果你想與不支持骨幹的默認REST/HTTP方式的傳統網絡服務器的工作,你可以選擇開啓Backbone.emulateHTTP。設置此選項將使用HTTP POST僞造PUT,PATCH和DELETE請求,並使用true方法設置X-HTTP-Method-Override標頭。如果emulateJSON也處於打開狀態,則真正的方法將作爲附加的_method參數傳遞。

ServiceStack Backbone.Todos Delete 405 not allowed