Laravel In Array validation


Laravel In Array validation

我正在尝试验证支付方式字段。

要求验证的字段必须是数组类型(允许多个值),并且项不应该是定义的选项

'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']