Laravel中的数据验证不起作用

时间:2019-11-03 16:39:31

标签: ajax laravel laravel-6

我已经在我的项目中创建了一个自定义请求,但是由于某种原因它无法正常工作。我面临两个错误。如果通过Ajax验证失败,我想在视图上显示一条消息。

  

1)422无法处理的实体错误

  

2)未定义变量:teacherrequest

我在Request文件夹中设置的

验证规则,

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错误,该如何在视图中显示?

3 个答案:

答案 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方法之前进行验证,这意味着您无需使用任何验证逻辑来​​使您的控制器变得混乱。