繁体   English   中英

Laravel 中的 required_if 验证

[英]required_if validation in Laravel

我正在尝试添加规则来验证字段。 仅当正文字段包含 HTML 时才需要“片段”字段。 我的控制器存储方法中有以下内容,但我无法弄清楚 required_if 如何与正则表达式一起工作以检查该字段是否包含 HTML:

$newsitem->update(request()->validate([
            'snippet' => 'nullable|max:255|not_regex:/[<>]/',
            'body' => 'required',
            ]));

从 Laravel 文档来看,它看起来像: 'required_if:anotherfield,value' 验证规则根据值返回一个布尔值,但我需要根据对 body 字段的正则表达式检查返回一个布尔值。

我知道我可以检查 body 是否等于 1:

'snippet' => 'required_if:body,==,1|nullable|max:255|not_regex:/[<>]/'

...但我需要一些检查主体是否包含 < 或 > 的东西。 (我可以在我的表单提交中添加一个隐藏字段,如果正文包含使用 javascript 的 html,它将获得一个值集,但我希望能够通过后端验证来处理这个。)

我需要使用自定义验证规则,还是可以单独使用默认的 Laravel 验证规则来处理?

我在 Laravel 文档中看到您可以使用: Rule::requiredIf方法来构建更复杂的条件。 这是我可以与 contains_hmtl 函数一起使用的东西吗?

'snippet' => Rule::requiredIf($request->snippet()->contains_html),

我真的觉得我在这里遗漏了一些东西,所以任何指针都将不胜感激。

使用RequiredIf尝试以下正则表达式:

[
    ...,
    'snippet' => ['nullable', 'max:255', new RequiredIf(function () {
        return preg_match('/<[^<]+>/m', request()->input('body')) !== 0;
    })],
    ...,
]

RequiredIf 规则接受一个应该返回一个布尔值的闭包。

Rule::requiredIf(function () use ($request) {
    //Perform the check on $request->snippet to determine whether it is a valid HTML here
    //Return true if it is valid HTML else return false
}),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM