Javascript 如何在laravel中验证X-editable请求(服务器端)
我已经设法让x-editable()来处理一个页面,当我点击一个字段时,它会显示内联,我可以编辑它,并且我能够成功地提交到一个POST-URI 这里的想法是,我将发送三个键值对:Javascript 如何在laravel中验证X-editable请求(服务器端),javascript,php,jquery,laravel,validation,Javascript,Php,Jquery,Laravel,Validation,我已经设法让x-editable()来处理一个页面,当我点击一个字段时,它会显示内联,我可以编辑它,并且我能够成功地提交到一个POST-URI 这里的想法是,我将发送三个键值对: array:3 [▼ "name" => "name" "value" => "mathematics" "pk" => "1" ] 我的update()方法捕获数组,并成功更新数据库中的记录。但我无法验证数据 这是我的控制器的外观: public function update(Re
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 );
}
这就好像我没有将“正确”的请求对象传递给validate()?没有表格提交,但明确说明:
Laravel生成包含所有验证错误的JSON响应。此JSON响应将与422 HTTP状态代码一起发送
路线:
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如果我没有弄错的话,
name
是要编辑的字段(DB列),而value
是值。看起来您正在更新名称
列,因此您必须验证请求中值
的唯一性,而不是“名称”
此外,我建议您使用控制器的validate
方法(由validateRequests
trait提供):
此处
validate
将自动拒绝,并在JSON响应中显示422代码和验证错误。如果通过,它将继续更新。(return$subject
还返回响应中对象的JSON表示。)如果我没有弄错的话,name
是要编辑的字段(DB列),而value
是值。看起来您正在更新名称
列,因此您必须验证请求中值
的唯一性,而不是“名称”
此外,我建议您使用控制器的validate
方法(由validateRequests
trait提供):
此处
validate
将自动拒绝,并在JSON响应中显示422代码和验证错误。如果通过,它将继续更新。(return$subject
也会在响应中返回对象的JSON表示。)我在理解您的问题时有点困难。您的值发送是否正确?但是验证没有“正确”运行?这是最大长度吗?主题关系?你在用什么“试图失败”
?@Henry名称
字段是唯一的,当我试图插入一个已经存在的名称时,它通过了验证,可能会导致内部错误。通常情况下,当我发送不带x-editable的ajax请求并尝试通过验证失败时,我会通过json返回错误消息,我会捕获并将其显示给用户。您的值发送是否正确?但是验证没有“正确”运行?这是最大长度吗?主题关系?你在用什么“试图失败”
?@Henry名称
字段是唯一的,当我试图插入一个已经存在的名称时,它通过了验证,可能会导致内部错误。通常,当我发送不带x-editable的ajax请求并尝试通过验证失败时,我会通过json返回错误消息,我会捕获该消息并将其显示给用户。如果控制器需要验证两(2)个字段(name
和另一个字段
)这里唯一的选择是对规则执行条件语句,对吗?@NathanSiafa是的,如果验证规则检查另一个字段的值,您也可以使用required\u。但是,字段总是name
和value
,不是吗?@lepeino非常感谢。你花了我一点钱,但这是值得的。如果有两(2)个字段需要控制器验证(name
和另一个字段
),这里唯一的选择就是在规则上做一个条件语句,对吗?@NathanSiafa是的,你也可以使用required\u if
验证规则来检查另一个字段的值。但是,字段总是name
和value
,不是吗?@lepeino非常感谢。你花了我一点钱,但值得。
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;
}