我正在尝试验证支付方式字段。
要求验证的字段必须是数组类型(允许多个值),并且项不应该是定义的选项
'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文档中找到任何这样的方法。有什么办法可以解决这个问题吗?
如果您使用的是更高版本的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
为例生成该方法)。
你可以扩展Laravel验证器并创建你自己的验证规则。在您的情况下,您可以很容易地定义自己的规则in_array
,如下所示:
Validator::extend('in_array', function($attribute, $value, $parameters)
{
return !array_diff($value, $parameters);
});
将计算$value
中找到的用户输入数组与$parameters
中找到的验证器数组之间的差值。如果所有$value
项都在$parameters
中找到,结果将是一个空数组,否定!
将是true
,这意味着验证通过了。然后您可以使用您已经尝试过的规则,但将in
替换为in_array
,如下所示:
['payment_method' => 'required|array|in_array:american_express,cash_on_delivery,paypal,paypal_credit_card,visa_master_card']