2017-02-18 27 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

相关问题