我设法让 x-editable(https://vitalets.github.io/x-editable/)与页面一起工作,因为当我点击一个字段时,它显示内联并且我可以编辑它,并且我能够成功提交到 POST URI。
这里的想法是我发送三个 key-value 对:
array:3 [▼
"name" => "name"
"value" => "mathematics"
"pk" => "1"
]
并且我的update()
方法捕获数组,并成功更新数据库中的记录。但我没有验证数据。
这是我的控制器的外观:
public function update(Request $request)
{
//
$id = $request->pk;
$subject = Subject::findOrFail($id);
$rules = array (
'name' => 'bail|required|max:20|unique:subjects,name,'.$id
);
即使我试图让它失败,这个验证也很容易通过
$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 生成包含所有验证错误的 JSON 响应。此 JSON 响应将以 422 HTTP 状态发送 code.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";
}
}
});
1https://laravel.com/docs/5.4/validation#quick-ajax-requests-and-validation
1 回答
如果我没弄错的话,
name
是要编辑的字段(DB 列),value
就是值。看起来您正在更新name
列,因此您必须验证请求中value
的唯一性,而不是“名称”。另外,我建议您使用控制器的
validate
方法(由ValidatesRequests
特征提供):这里
validate
将自动拒绝 422 代码和 JSON 响应中的验证错误。如果通过,它将继续更新。 (return $subject
还返回 response.)中对象的 JSON 表示