Laravel In Array验证

时间:2015-10-09 17:25:31

标签: php laravel laravel-4

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

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

'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文档中找到任何此类方法。有没有解决这个问题?

2 个答案:

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