我遇到订阅表单的情况,根据用户选择,它必须具有不同的验证规则。 我几乎完成了这个,但是我陷入了一个需要一系列规则的地步,我认为我无法通过预定义的laravel规则获得这些规则。
如下图所示,重点是用户选择开票首选项,选项数字和已打印,如果用户选项已打印我至少需要一个实际地址,因此街道地址字段组 OR 区域地址字段组必须是强制性的。
强制字段,除非其他字段已填写,可以通过required_without_all
规则来实现,因此我尝试没有成功,required_if
和{{1}的组合}规则,如下例所示:
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',
...
];
}
规则,无论我是否在第一点检查数字。
答案 0 :(得分:1)
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)
}
另一种类似的方法是使用多个数组,最后将它们合并在一起(构建它们)。这可能会导致更好的代码。另外,不要害怕使用一个或两个私有方法来清理代码。