为什么验证会在Laravel中触发错误?

时间:2013-11-29 12:24:39

标签: php validation laravel laravel-4

使用Laravel 4验证时遇到问题。这是代码:

$validator = Validator::make(
              array(
                  'surname' => ['Laravel'],
              ),
              array(
                  'surname' => 'integer|alpha_dash'
              )
        );
        $validator->passes();        
        var_dump($validator->failed());

它会导致错误:错误:preg_match()期望参数2为字符串,给定数组

假设姓氏来自用户,它可以是数组或字符串。

我有两个问题:

  1. 为什么alpha_dash导致错误而不是正常的验证错误?
  2. 为什么在我们对'整数'规则得到FALSE后,验证会继续'alpha_dash'规则?这是一个错误吗?

1 个答案:

答案 0 :(得分:2)

我刚才做的测试数组:

按照您的方式创建了一些字段:

<input type="text" name="user[surname][0]">
<input type="text" name="user[surname][1]">

并验证了其中一个:

$validator = \Validator::make(
    Input::all(),
    array('user.surname.0' => 'required|min:5')
);

var_dump($validator->passes());

然后我只是手动完成:

$validator = \Validator::make(
    array(
        'user' => ['surname' => [ 0 => 'Laravel'] ],
    ),
    array('user.surname.0' => 'required|min:5')
);

这对我来说都很有用。

如果您需要分析Laravel未提供的内容,您可以通过执行以下操作来扩展Validator:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});

修改

但是,是的,如果你这样做,就会有一个错误:

$validator = \Validator::make(
    array(
        'user' => ['surname' => [ 0 => 'Laravel'] ],
    ),
    array('user.surname.0' => 'integer|alpha_dash')
);

它会给你一个

"Error: preg_match() expects parameter 2 to be string, array given".

以下是OP发布的Laravel问题:https://github.com/laravel/laravel/issues/2457