【问题标题】:Data validation in Laravel is not workingLaravel 中的数据验证不起作用
【发布时间】:2019-11-03 16:39:31
【问题描述】:

我在我的项目中创建了一个自定义请求,但不知何故它不起作用。我面临两个错误。如果通过 Ajax 验证失败,我会尝试在视图中显示一条消息。

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

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

【问题讨论】:

    标签: ajax laravel laravel-6


    【解决方案1】:

    首先,public function update(TeacherRequest $request) 所以在函数中你需要使用$request 而不是$teacherrequest

    其次,您需要让 public function authorize() 返回 true。

    【讨论】:

    • 是的,如果出现验证错误,我如何从 json 中显示消息?
    • console.log(data) 的输出是什么?
    • 根据 Laravel Docs:但是,如果验证失败,则会抛出异常,并且会自动将正确的错误响应发送回用户。对于传统的 HTTP 请求,会生成重定向响应,而 AJAX 请求会发送 JSON 响应。
    • console.logo(data) 返回数据未定义。错误:函数(xhr){ console.log(数据); },
    • 如果您使用的是验证类,则无需进行检查。如果验证失败,它将发送 JSON 响应。因此,如果您 console.log 您的数据,您将有一个错误属性
    【解决方案2】:

    您将 TeacherRequest 定义为 $request TeacherRequest $request

    但在下一行使用它

    if ($teacherrequest->fails()){ // this is wrong
    

    正确的应该这样定义

    TeacherRequest $teacherrequest
    

    或者如果你没有更改依赖注入,只需像这样更改验证器

    if ($request->fails()){
    

    总结:为什么会发生错误已经具体解释了这是未定义的teacherrequest变量,因此上面的2个解决方案可以解决它

    【讨论】:

    • 方法 App\Http\Requests\TeacherRequest::fails 不存在。
    • 如果我删除 if 条件,我得到 422 错误,如何在视图中显示?
    • 其实这样使用依赖注入就不需要再通过条件检查了
    • 如果出现验证错误,我可以在 json 中发送自定义消息吗?
    【解决方案3】:

    如果您在控制器的操作方法中键入提示您的请求类作为参数(就像您在上面的示例中所做的那样),Laravel 将自动运行您的验证规则并在验证失败时返回 422 Unprocessable Entity。您不需要像上面那样手动检查验证是否失败;在控制器的 update 方法中,您可以实现验证通过时要运行的逻辑。

    在您的前端,您还需要使用error ajax 回调来显示错误消息,因为422 状态代码不被视为成功。

    请参阅documentation 创建表单请求。

    那么,如何评估验证规则?您需要做的就是在控制器方法上输入提示请求。在调用控制器方法之前验证传入的表单请求,这意味着您无需使用任何验证逻辑使控制器混乱。

    【讨论】:

    • with: public function update(TeacherRequest $teacherrequest, $id) 错误:方法 App\Http\Requests\TeacherRequest::fails 不存在
    • 如果我删除 if 条件,我得到 422 错误,如何在视图中显示?
    • 422 在这种情况下是一个预期的错误。那就是验证失败。要在您的视图中显示它,您将需要使用 error ajax 回调来显示错误消息(而不是像您的示例中的 success 回调)。查看错误回调设置:api.jquery.com/jquery.ajax/#jQuery-ajax-settings
    • 如果出现验证错误,我可以在 json 中发送自定义消息吗?
    • 是的。查看 Laravel 验证的文档:laravel.com/docs/5.8/validation#customizing-the-error-messages
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2019-01-24
    • 2017-10-08
    相关资源
    最近更新 更多