【问题标题】:Failing a validation in a FormRequest withValidator method in Laravel在 Laravel 的 FormRequest withValidator 方法中验证失败
【发布时间】:2020-08-05 17:46:10
【问题描述】:

我创建了一个自定义FormRequest 来验证与具有属性的特定产品相关的请求。其中一条规则当然是product 请求字段存在于products 数据库中。

但是,我有一个更复杂的规则,必须在之后检查。我正在使用withValidator 方法检查此规则,然后执行:

$validator->after(function ($validator) {
    // check the extra rule
    ...
});

(这并不特别重要,但这条规则是为了检查,给定用户选择的颜色和尺寸等属性,这对应于属于产品的唯一 sku)

那么如何导致验证失败呢?

另一个要求是,当此验证失败时,它应返回 500 而不是 422。此外,如果此 sku 缺货,它应返回自定义 JSON 响应。如何在 FormRequest 中执行此操作?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    要在后挂钩中添加错误,您可以这样做:

    $validator->after(function ($validator) {
        if (!$someCondition) {
            $validator->errors()->add('key', 'Some error message explaining error.');
        }
    });
    

    如果您要验证 product 字段,则“键”应为“产品”。

    对于第二个要求,您可以覆盖 failedValidation 函数。

    protected function failedValidation(Validator $validator)
    {
        throw (new ValidationException($validator))
                    ->errorBag($this->errorBag)
                    ->redirectTo($this->getRedirectUrl())
                    ->status(500);
    }
    

    现在,如果您需要发送自定义响应,您可以检查 App\Exceptions\Handler.php 中的 500 状态

    public function render($request, Throwable $exception)
    {
        if (is_a($exception, ValidationException::class) && $exception->getCode() === 500) {
            // Handle your custom JSON reponse
        }
    
        return parent::render($request, $exception);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-18
      • 2019-05-05
      • 2020-06-25
      • 2019-12-14
      • 2019-08-26
      • 2017-02-03
      • 2015-10-04
      • 2023-01-21
      相关资源
      最近更新 更多