当前位置: 首页 > 知识库问答 >
问题:

使用自定义表单请求类时检查是否有任何验证错误

谯嘉懿
2023-03-14

我使用的是Laravel 5.4。我有一个自定义表单请求类,其中有我的验证规则和消息,我在控制器中使用它,如下所示:

public function store(CustomFormRequest $request)
{
  //
}

我正在使用ajax发送请求,当出现任何验证错误时,Laravel会抛出一个带有422状态码的HTTP响应错误,其中包括验证错误的JSON表示。

但我不想那样。相反,在我的控制器的方法中,我想找出是否有任何验证错误,如果有,那么我想返回一个带有一些额外数据的响应以及验证消息,如下所示:

// Inside my Controller
public function store(CustomFormRequest $request)
{
   if ($validator->fails())
   {
        $errors = $validator->errors();

        return response()->json(array('status' => 2, 'msg' => $errors->all() ));
    }
}

你能帮忙吗?提前谢谢。

共有3个答案

南门星河
2023-03-14

试试这个:

form.ajaxSubmit({
    async: false,
    type: yourMethod,
    url: yourRoute,
    headers: { 'X-CSRF-TOKEN': "{{csrf_token()}}" },
    dataType: 'json',
    success: function(data){
        location.href = data.redirect_to;
    },
    error: function(data) {
        var errors = data.responseJSON;
        var errorsArr = [];
        for (error in errors) {
            errorsArr.push(errors[error]);
        }

        errorsArr = $.map(errorsArr, function(n){
            return n;
        });

        alert("<strong class='text-danger'>" + errorsArr.join("<br>") + "</strong>");
        console.log(errors);

    }
});

控制器存储方法中返回:

return response()->json(['redirect_to' => '/your_route']);
鲜于光赫
2023-03-14

我知道您想要控制器中的逻辑,但您仍然可以为此利用您的请求文件。在Laravel留档(假设您使用的是最新版本)中,它被描述为在表单请求中添加挂钩后:

如果您想向表单请求添加“后”挂钩,您可以使用with Validator方法。此方法接收完全构造的验证器,允许您在实际评估验证规则之前调用其任何方法:

/**
 * Configure the validator instance.
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if ($this->somethingElseIsInvalid()) {
            $validator->errors()->add('field', 'Something is wrong with this field!');
        }
    });
}
鲜于俊侠
2023-03-14

最简单的方法是重写表单请求类的response()方法。

为此,您可以简单地将以下内容添加到您的类中:

public function response(array $errors)
{
    if ($this->expectsJson()) {
        return new JsonResponse(['status' => 2, 'msg' => $errors], 422);
    }

    return parent::response($errors);
}

不要让get导入

希望这有帮助!

 类似资料:
  • 问题内容: 给定一个简单的html形式,如下所示: 如果至少有一项输入为空,我需要您的帮助来知道如何检查验证时间。所需的验证如下。用户必须至少完成一个首选项。 使用jQuery的这: 可以,但是想弄清楚如何使用angular来做同样的事情。 非常感谢 吉列尔莫 问题答案: 因此,想法是如果所有输入均为空白,则禁用提交按钮。你可以这样 是强制转换为值。并且和都被评估为。

  • 如何使用自定义请求进行验证,我的请求使用数组键 [编辑][代码更新]显示错误: 传递给App\Http\Controllers\Controller::validate()的参数1必须是给定数组的Illumbite\Http\Request的实例,

  • 问题内容: 我有一个看起来像这样的表格: 它的设置使得输入数据后所有必填字段和“保存”按钮都可以使用。但是,部分验证是,我将使用输入的数据使用$ http通过POST通过服务器访问服务器。 我应该在函数中放置该逻辑还是有一个更好的放置位置? 更新: * 我实现了以下内容,将其作为元素上的属性应用,但它在每次我不喜欢的按键上调用服务器/数据库: 问题答案: 您不需要在指令中发出$ http请求,更好

  • 问题内容: 我想检查服务器端是否对我的php页面的请求是ajax请求。 我看到了两种方法可以做到这一点: 第一种方法:在请求中发送一个参数,该参数告诉页面这是AJAX请求(= ) mypage.php: 第二种方式:将标头设置为: 客户端js: mypage.php: 事实是,这两种方法很容易被黑,因此检查我是否收到这样的AJAX请求并不安全。 如何检查我是否收到AJAX请求? 问题答案: 没有确

  • 具有自定义验证的基本HTML5表单。如果提交的值不是数字,浏览器应显示错误消息“字段必须是数字”如果输入“abc”并按submit(或按enter键),该字段将标记为无效,但不会显示错误消息。再次按submit(或按enter)将显示消息。这种双重提交行为出现在Windows和OS X上最新版本的Firefox、Chrome、Safari和IE上。您会注意到默认的“此字段是必需的…”消息在第一次提

  • 我正在使用忍者表单插件在我的WordPress安装。 我的表单有3个输入文本字段。 在按下submit按钮后,我需要通过检查输入的值是否存在于我的数据库中的自定义表中来验证其中一个输入。 如果该值不存在,则不会发生任何事情(Ninja Form保存表单),如果它存在,则需要添加一个Ninja Form错误,并让用户更改输入,以便用新的值保存表单。 如何钩住提交操作?我如何才能在这个钩子中得到我需要