【问题标题】:Laravel: Form validation string-length error messages cause exceptionLaravel:表单验证字符串长度错误消息导致异常
【发布时间】:2013-03-06 00:38:33
【问题描述】:

当尝试实现 Laravel 的基于长度的验证时

'password' => array(
    'required',
    'alpha_dash',
    'Min:7'
)

并在我的视图中输出错误消息

{{
    $errors->first(
        'password',
        '<span class="error">:message</span>'
    )
}}

我明白了

Unhandled Exception
Message:
Array to string conversion
Location:
_avalog\laravel\messages.php on line 188
Stack Trace:
#0 _avalog\laravel\laravel.php(42): Laravel\Error::native(8, 'Array to string...', '_avalog...', 188)
#1 [internal function]: Laravel\{closure}(8, 'Array to string...', '_avalog...', 188, Array)
#2 _avalog\laravel\messages.php(188): str_replace(':message', Array, 'get('password', 'get()

调试中,看来是真的。如果我print_r( $validation );

Laravel\Validator Object (
    [attributes] => Array (
        [username] => fred
        [email] =>
        [password] => asd
        [csrf_token] => DWg3CUfqtMZkIRfyZXNEqygvWUHsGS9SQMue2V4S
    )
    [errors] => Laravel\Messages Object (
        [messages] => Array (
            [email] => Array (
                [0] => The email field is required.
            )
            [password] => Array ( 
                [0] => Array (
                    [numeric] => The password must be at least 7.
                    [file] => The password must be at least 7 kilobytes.
                    [string] => The password must be at least 7 characters.
                )
            )
    )
    [format] => :message
)

您可以看到,messages 实际上包含一个密码数组,该数组似乎取决于输入类型,即使我在规则中指定它是 alphadash

[password] => Array (
    [0] => Array (
        [numeric] => The password must be at least 7.
        [file] => The password must be at least 7 kilobytes.
        [string] => The password must be at least 7 characters.
    )
)

其他的不要

[email] => Array (
    [0] => The email format is invalid.
)

查看 Laravel 框架中的messages.php,它无法处理这种基于数组的消息传递,所以我认为在它到达那里之前我做错了什么,但我不知道是什么。

感谢您的帮助。

【问题讨论】:

    标签: php validation laravel laravel-3


    【解决方案1】:

    您的规则输入错误。它必须像

    'password' => 'required|alpha_dash|min:7'
    

    查看 Laravel 验证 docs 了解更多信息

    【讨论】:

    • 哇,现在我觉得自己很笨。我使用了管道分隔的语法 several 次,但没有用,但似乎 Min 上的大写 M 是原因。感谢您的帮助。很遗憾,这些文档没有提到规则必须为小写的任何地方。
    • @Hwulex 别担心,不是你,我团队中的每个人都有同样的问题,Laravel 文档在这方面真的很糟糕!
    【解决方案2】:

    'password.min' => "密码不能少于6个字符。",

    $custom_validation_messages = array(
      'password.min' => "Password can not be less than 6 characters.",
      'password.required' => "Password is required"
    );
    
       $validator = Validator::make($data, [
                    //'email'          => ['required','unique:users,email','email','max:255'],
       'email'          => ['required','email','max:255'],
       'password'       => 'required|min:6|confirmed'
    
     ],$custom_validation_messages);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      相关资源
      最近更新 更多