首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Laravel验证required_if和required_without_all规则结合起来?

如何将Laravel验证required_if和required_without_all规则结合起来?
EN

Stack Overflow用户
提问于 2017-08-16 19:13:25
回答 1查看 1.4K关注 0票数 3

我遇到了订阅表单的情况,根据用户选择,订阅表单必须有不同的验证规则。我几乎完成了这一点,但我被困在一个点,需要一个组合的规则,我认为我不能与预定的拉拉规则。

如下图所示,关键是当用户选择发票首选项时,使用选项Digital打印,如果用户选项是打印的,则至少需要一个物理地址,因此必须强制使用街道地址字段组地区地址字段组。

强制字段(除非其他字段被填充)可以通过required_without_all规则实现,所以我尝试了required_ifrequired_without_all规则的组合,如下面的示例:

代码语言:javascript
复制
public function rules()
{
return [
...
    'invoicing_preferences' => 'required',
    'invoicing_email' => 'email|required_if:invoicing_preferences,digital',
    'invoicing_street_name' => 'string|required_if:invoicing_preferences,printed|required_without_all:invoicing_district,invoicing_parcel',
    'invoicing_street_number' => 'number|required_if:invoicing_preferences,printed|required_without_all:invoicing_district,invoicing_parcel',
    'invoicing_street_flat' => 'number|required_if:invoicing_preferences,printed|required_without_all:invoicing_district,invoicing_parcel',
    'invoicing_street_dep' => 'alpha_num|required_if:invoicing_preferences,printed|required_without_all:invoicing_district,invoicing_parcel',
    'invoicing_district' => 'alpha_num|required_if:invoicing_preferences,printed|required_without_all:invoicing_street_name, invoicing_street_number; invoicing_street_flat,invoicing_street_dep',
    'invoicing_parcel' => 'alpha_num|required_if:invoicing_preferences,printed|required_without_all:invoicing_street_name, invoicing_street_number; invoicing_street_flat,invoicing_street_dep',

...
    ];
}

这种组合不起作用,因为总是导致required_with_all规则,不管我是否在第一点检查了数字

EN

回答 1

Stack Overflow用户

发布于 2017-08-16 23:01:06

rules()方法是,这是一种方法,期望它返回规则数组。我为什么要写这么明显的事?那么,在它里面插入任何一种验证逻辑,这意味着它也可以对发布的数据进行一些评估,并逐步建立返回数组。

代码语言:javascript
复制
public function rules()
{
    $this; // holds information about request itself with all the data POST-ed

    if (something) {
        return []; // something is true...
    }

    return []; // default behaviour (ehm, something is not true)
}

另一种类似的方法是使用多个数组,最后将它们合并在一起(构建它们)。这可能会产生更好的代码。也不要害怕使用一两种私有方法来清理代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45721299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档