我遇到了订阅表单的情况,根据用户选择,订阅表单必须有不同的验证规则。我几乎完成了这一点,但我被困在一个点,需要一个组合的规则,我认为我不能与预定的拉拉规则。
如下图所示,关键是当用户选择发票首选项时,使用选项Digital和打印,如果用户选项是打印的,则至少需要一个物理地址,因此必须强制使用街道地址字段组或地区地址字段组。

强制字段(除非其他字段被填充)可以通过required_without_all规则实现,所以我尝试了required_if和required_without_all规则的组合,如下面的示例:
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规则,不管我是否在第一点检查了数字。
发布于 2017-08-16 23:01:06
rules()方法是,这是一种方法,期望它返回规则数组。我为什么要写这么明显的事?那么,在它里面插入任何一种验证逻辑,这意味着它也可以对发布的数据进行一些评估,并逐步建立返回数组。
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)
}另一种类似的方法是使用多个数组,最后将它们合并在一起(构建它们)。这可能会产生更好的代码。也不要害怕使用一两种私有方法来清理代码。
https://stackoverflow.com/questions/45721299
复制相似问题