【问题标题】:Why validation triggers error in Laravel?为什么验证会在 Laravel 中触发错误?
【发布时间】:2013-12-15 15:37:00
【问题描述】:

在使用 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 on 'integer' 规则后,验证继续到 'alpha_dash' 规则?这是一个错误吗?

【问题讨论】:

    标签: php validation laravel laravel-4


    【解决方案1】:

    我刚刚对数组做了什么:

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

    <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

    【讨论】:

    • 我知道这是一个数组。我在问为什么我有错误而不是标准验证消息?如果用户发布一个数组怎么办?
    • 因为您应该发送正确的数据以供验证器处理,所以验证器需要一个字符串,而不是数组。
    • print_r(\Input::all());数组 ( [姓] => 数组 ( [0] => Laravel ) )
    • 这很奇怪。你能分享一下你的看法吗?
    • 这里是一个获取查询的例子:?user[surname][0]=Laravel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2019-02-24
    • 2019-12-31
    • 1970-01-01
    • 2015-07-24
    • 2019-08-08
    相关资源
    最近更新 更多