2017-02-18 68 views
3

存在實體User,它被記錄在表中Users如何在Laravel中使用修補程序請求?

默認情況下,此表中的某些字段爲空。

我需要更新這些字段並設置非空數據。

爲此,我嘗試使用PATCH方法Laravel:

路由:

Route::patch('users/update', '[email protected]'); 

控制器:

public function update(Request $request, $id) 
    { 
     $validator = Validator::make($request->all(), [ 
      "name" => 'required|string|min:3|max:50', 
      "email_work" => 'email|max:255|unique:users', 
      "surname" => 'required|string|min:3|max:50', 
      "tel" => 'required|numeric|size:11', 
      "country" => 'required|integer', 
      "region" => 'required|integer', 
      "city" => 'required|integer' 
     ]); 

     if ($validator->fails()) { 
      return response()->json(["message" => $validator->errors()->all()], 400); 
     } 

     $user = User::where("user_id", $id)->update([ 
      "name" => $request->name, 
      "surname" => $request->surname, 
      "tel" => $request->tel, 
      "country" => $request->country, 
      "city" => $request->city, 
      "region" => $request->region, 
      "email_work" => $request->email 
     ]); 

     return response()->json(["user" => $user]); 

    } 

這是否意味着我可以傳遞任何數據更新? 我應該通過$id參數路由和控制器相對?

如何在Laravel中爲PATCH方法使用正確的處理程序?

+0

你能運行'PHP工匠路線:list'向我們展示它告訴你關於你註冊這個特定的路線? –

+0

如果你在update()函數中有$ id參數,那麼我想你需要添加'{id}'你的路由,就像這樣'Route :: patch('users/{id}/update','UsersController @ update ');' –

回答

6

您的路線是:

Route::patch('users/update', 'Us[email protected]'); 

更換,對所有CRUD調度研究使用下列路線路線:

Route::resource('users', 'UsersController'); 

如果使用ajax提交數據,然後用以下內容替換您的類型和網址:

type: "patch", 
url: "{{url('/')}}users/" + id, 

,如果你不使用AJAX不是使用下列內容:

<form method="POST" action="{{url('/')}}users/".$id> 
    {{csrf_field()}} 
    {{ method_field('PATCH') }} 
</form> 
0

更新路由按以下

Route::patch('/users/update/{id}',[ 
    'uses' => '[email protected]' 
]); 
+0

在我的情況下,我從控制器獲得'id'從Auth對象 – Darama

1

是的,你需要發送ID路由補丁。來自https://laravel.com/docs/5.4/controllers#resource-controllers的Laravel示例

PUT/PATCH -/photos/{photo},因此您不需要update單詞在您的路線中。只是用戶/ ID和方法PUT或PATCH。

的CRUD操作UPD:

// Routes 
Route::resource('items', 'ItemsController'); 

// Form for update item with id=1 
<form method="POST" action="{{ route('items.update', ['id' => 1])}}"> 
    {!! csrf_field() !!} 
    <input name="_method" type="hidden" value="PATCH"> 
    <!-- Your fields here --> 
</form> 

// Controller 
public function update($id, Request $request) 
{ 
    // Validation here 

    $item = Item::findOrFail($id); 

    // Update here 
} 
+0

你能分享一個真實的樣本嗎? – Darama

+0

謝謝你男人!它幫助我設置多個參數來更新表單動作。 – rufatZZ