我已经在我的项目中创建了一个自定义请求,但是由于某种原因它无法正常工作。我面临两个错误。如果通过Ajax验证失败,我想在视图上显示一条消息。
1)422无法处理的实体错误
和
我在Request文件夹中设置的2)未定义变量:teacherrequest
验证规则,
TeacherRequest.php:
public function rules()
{
return [
'Name' => 'required|regex:/^[\pL\s\-]+$/u',
'FName' => 'required|regex:/^[\pL\s\-]+$/u',
];
}
控制器:
public function update(TeacherRequest $request, $id)
{
if ($teacherrequest->fails()) {
return response()->json([
'msg' => 'Please Enter Correct Data',
]);
}
}
AJAX:
success: function (data) {
if(data.msg){
alert("please validate data");
}
}
更新:
如果我删除了if条件,则会收到422错误,该如何在视图中显示?
答案 0 :(得分:2)
首先,public function update(TeacherRequest $request)
,因此在该功能中,您需要使用$request
而不是$teacherrequest
。
第二步,您需要让public function authorize()
返回true。
答案 1 :(得分:0)
您将TeacherRequest定义为$ request TeacherRequest $request
但在下一行中将其用作
if ($teacherrequest->fails()){ // this is wrong
正确的定义应该是这样的
TeacherRequest $teacherrequest
或者如果您不更改依赖项注入,则只需更改验证器
if ($request->fails()){
总结:为什么发生错误的原因已经具体说明,它是未定义的teacherrequest
变量,因此上述两种解决方案都可以解决
答案 2 :(得分:0)
如果您在控制器的操作方法中键入hint作为您的请求类的参数(如您在上面的示例中所做的那样),Laravel将自动运行您的验证规则,如果验证失败,则返回422 Unprocessable Entity
。您不需要像上面那样手动检查验证是否失败;在控制器的update
方法中,您可以只实现要在验证通过时运行的逻辑。
在前端,您还需要使用error
ajax回调来显示错误消息,因为422
状态代码不成功。
有关创建表单请求的信息,请参见documentation。
那么,如何评估验证规则?您需要做的就是在控制器方法上键入提示。传入的表单请求将在调用controller方法之前进行验证,这意味着您无需使用任何验证逻辑来使您的控制器变得混乱。