2014-09-25 94 views
0

我正在發送一個處理輸入數據並更新記錄的PUT請求,但我得到了上述響應。但是,問題似乎並不是路線,因爲如果我在$user = User::whereId($id)->firstOrFail();行之後執行dd($user),我會正確返回對象。獲取Symfony Component HttpKernel Exception MethodNotAllowedHttpException

然而,當它來驗證它時,它會拋出這個錯誤。

# routes 
Route::resource('users', 'UsersController', ['only' => ['index', 'show', 'update']]); 

# api call 
PUT /users/2 

# controller 
public function update($id) 
{ 

    $user = User::whereId($id)->firstOrFail(); 

    $input = Input::all(); 

    $this->userForm->validate($input); 

    $user->fill($input)->save(); 

    return $user->toJson(); 

} 

# userForm class 

<?php namespace Olp\Forms; 

use Laracasts\Validation\FormValidator; 

class UserForm extends FormValidator { 

    protected $rules = [ 
     'email'   => 'required|email|unique:users', 
     'password'  => 'required', 
     'password_confirmation' => 'required|same:password', 
     'firstname'  => 'required', 
     'lastname'  => 'required', 
     'schoolname' => 'required', 
     'address1'  => 'required', 
     'address2'  => 'required', 
     'postcode'  => 'required', 
     'city'   => 'required' 
    ]; 
} 

,並在我的UserController的:

use Olp\Forms\UserForm; 

class UsersController extends \BaseController { 

    function __construct(UserForm $userForm) 
    { 
     $this->userForm = $userForm; 
    } 
+0

順便說一句,你只需要:'$ user = User :: findOrFail($ id);' – 2014-09-25 14:05:55

+0

所以這裏發生了什麼:'$ this-> userForm-> validate($ input);'?你可以包含模型函數的代碼嗎? – 2014-09-25 14:09:03

+0

@hebron感謝您的回覆 - 我已經添加了該部分的相關代碼。 – babbaggeii 2014-09-25 15:33:05

回答

0

我不是一個Laravel的傢伙,但對他們的文檔的快速檢查表明Resource Controllers支持除了其他HTTP動詞PUT。

我無法弄清楚如何HTTP動詞支持添加到任意行動,但this表明您可以命名與動詞前綴的控制器操作它響應

public function putUpdate($id) 
+0

如果他使用'Route :: controller'是的,但是他使用'Route:resource',它會使用'PUT'路徑自動定義'update'。 :) – 2014-09-25 14:02:17

相關問題