我正在尝试验证付款方式字段。
要求是验证字段必须是类型数组(允许多个值)且项目不应该是定义的选项
'payment_method' => 'required|array|in:american_express,cash_on_delivery,paypal,paypal_credit_card,visa_master_card'
因此用户应该传递一个值数组,例如
array('american_express','paypal');
但不应该传递
array('american_express', 'bank');
我无法在Laravel 4.1文档中找到任何此类方法。有没有解决这个问题?
答案 0 :(得分:3)
如果您使用的是Laravel的更高版本(不确定该功能何时可用 - 但肯定在5.2中),您只需执行以下操作:
[
'payment_method' => 'array',
'payment_method.*' => 'in:american_express,cash_on_delivery,paypal,paypal_credit_card,visa_master_card'
];
如果您愿意,可以检查payment_method
本身是否为数组,并且星形通配符允许您与数组输入中的任何数据匹配。
您可以考虑将此项放入请求验证程序的rules()
方法中(例如,您可以使用php artisan make:request PaymentRequest
生成该方法。
答案 1 :(得分:2)
您实际上可以扩展Laravel验证器并创建自己的验证规则。在您的情况下,您可以非常轻松地定义自己的in_array
规则,如下所示:
Validator::extend('in_array', function($attribute, $value, $parameters)
{
return !array_diff($value, $parameters);
});
在$value
中找到的用户输入数组与$parameters
中找到的验证程序数组之间compute the difference。如果在$value
中找到所有$parameters
项,则结果将为空数组,否定!
将为true
,这意味着验证已通过。然后,您可以使用您已尝试的规则,但将in
替换为in_array
,如下所示:
['payment_method' => 'required|array|in_array:american_express,cash_on_delivery,paypal,paypal_credit_card,visa_master_card']