如何在laravel中validationX-editable请求(服务器端)

我已经设法使用x-editable( https://vitalets.github.io/x-editable/ )来处理页面,就在我点击某个字段时,它显示内联并且我可以编辑它,我能够成功提交到POST URI。

这里的想法是我发送三个键值对:

array:3 [▼ "name" => "name" "value" => "mathematics" "pk" => "1" ] 

我的update()方法捕获数组,并成功更新数据库中的记录。 但我没有validation数据。

这是我的控制器的外观:

  public function update(Request $request) { // $id = $request->pk; $subject = Subject::findOrFail($id); $rules = array ( 'name' => 'bail|required|max:20|unique:subjects,name,'.$id ); 

即使我试图让它失败,这个validation也很容易通过

  $validator = Validator::make ( $request->all(), $rules ); if ($validator->fails ()) { return response()->json ( array ( 'errors' => $validator->getMessageBag ()->toArray () ) ); } else { $subject->update([$request->name => $request->value]); } return response ()->json ( $subject ); } 

所以就好像我在某种程度上没有将“正确”的Request对象传递给validate()? 没有表单提交,但文档明确指出:

Laravel生成包含所有validation错误的JSON响应。 此JSON响应将与422 HTTP状态代码一起发送。 1

路线:

 Route::post('/subjects/update/', 'SubjectsController@update'); 

脚本:

 $('#subjects').editable({ container:'body', selector:'td.name', type:'post', dataType:'JSON', validate:function(value){ if ($.trim(value) === '') { return "Field is required"; } } }); 

1 https://laravel.com/docs/5.4/validation#quick-ajax-requests-and-validation

如果我没有弄错, name是要编辑的字段(DB列), value是值。 看起来您正在更新name列,因此您必须validation请求中value的唯一性,而不是“名称”。

另外,我建议你使用你的控制器的validate方法(由ValidatesRequests特性提供):

 public function update(Request $request) { $id = $request->pk; $subject = Subject::findOrFail($id); $this->validate($request, [ 'name' => 'required', // this should be the column to update 'value' => 'bail|required|max:20|unique:subjects,name,'.$id ]; $subject->update([$request->name => $request->value]); return $subject; } 

这里validate将自动拒绝422代码和JSON响应中的validation错误。 如果通过,它将继续更新。 ( return $subject还返回响应中对象的JSON表示。)