【问题标题】:Laravel validation request fromLaravel 验证请求来自
【发布时间】:2021-02-13 03:04:45
【问题描述】:

我有 laravel 验证申请表,像这样:

public function rules()
{
    $id = $this->input('wlId');

    return [
        'id'          => ['sometimes ', 'integer'],
        'domain_name'   => ['required', 'string', 'unique:white_label,domain_name' . $id],
        'disabled'      => ['required', 'boolean']
    ];
}

我在唯一检查期间设置了 id 以忽略我的条目,但如果 id 不是整数而是例如字符串,那么我将从验证器收到 sql 错误。

如果 id 字段验证失败,如何停止验证?

【问题讨论】:

  • 因为你指定应该是整数:'id' => ['sometimes ', 'integer'], 这意味着应该只是整数,但是如果你想成为整数你应该使用'numeric'

标签: laravel validation


【解决方案1】:

在使用unique 验证规则时,您将忽略某个值。 考虑以下sn-p;

use Illuminate\Validation\Rule;

// ...

public function rules() {
    $id = $this->input('wlId');

    return [
        'id' => ['sometimes ', 'integer'],
        'domain_name' => [
            'required',
            'string',
            Rule::unique('white_label', 'domain_name')->ignore($id)
        ],
        'disabled' => ['required', 'boolean']
    ];
}

更多详情,请查看此链接; https://laravel.com/docs/8.x/validation#rule-unique

【讨论】:

  • 和我的例子一样。如果没有传递 id 字段,您将收到 sql 错误。由于验证器会尝试通过 id 从 white_label 表中获取域名
【解决方案2】:

documentation 中所述,您可以使用bail 规则

有时您可能希望在第一次验证失败后停止对属性运行验证规则。为此,请将保释规则分配给属性

    $request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
    ]);

在本例中,如果 title 属性上的唯一规则失败,则不会检查 max 规则。规则将按照分配的顺序进行验证。

【讨论】:

  • 保释以停止我对某个字段的验证,但仍会进行进一步的验证。在你的例子中。如果没有通过 title 字段,则 unique:posts 将不再被验证,但 b​​ody 字段仍将被验证。如果标题字段验证失败,我希望不验证正文字段
猜你喜欢
  • 2017-05-30
  • 2017-11-21
  • 2020-01-13
  • 2017-11-17
  • 2017-10-01
  • 2019-12-31
  • 2020-11-06
  • 2020-08-20
  • 2018-09-15
相关资源
最近更新 更多