3

我通过创建一个类创建了一个自定义错误函数;

<?php

class CoreValidator extends Illuminate\Validation\Validator
{
    public function validatePostcode($attribute, $value, $parameters = null)
    {
        $regex = "/^((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))$/i";
        if(preg_match($regex ,$value)) {
            return true;
        }
        return false;
    }
}

我在我的模型中引用它;

public static $rules = array(
        'first_name' => 'required|Max:45',
        'surname' => 'required|Max:45',
        'address_line_1' => 'required|Max:255',
        'address_line_2' => 'Max:255',
        'address_line_3' => 'Max:255',
        'town' => 'required|Max:45',
        'county' => 'Max:45',
        'postcode' => 'required|Postcode',
        'phone_number' => 'required|Max:22'
    );

它已在我的global.php中注册;

Validator::resolver(function($translator, $data, $rules, $messages) {
        return new CoreValidator($translator, $data, $rules, $messages);
    });

一切正常,但它返回的错误消息是

验证.邮政编码

如何/在哪里为此设置自定义错误消息?
我尝试过设置app/lang/en/validation.php(均无效);

'custom' => array(
        "validation.postcode" => "my error message 1",
        "postcode" => "my error message 2"
    )

PS我知道已经有一个正则表达式验证方法,但这个问题对我来说更普遍。

4

6 回答 6

7

我想我已经破解了。

我将消息添加到app/lang/en/validation.php的主数组中,而不是自定义子数组中。

return array(
    ...
    "url" => "The :attribute format is invalid.",
    "postcode" => "my error message 2",
    ...
)

如果这不是正确的方法,那么有人可以自由地纠正我。

于 2013-08-15T10:44:30.330 回答
3

您可以使用setCustomMessages()方法来分配自定义消息,例如下面的代码

<?php

class CoreValidator extends Illuminate\Validation\Validator
{

    private $custom_messages = array(
        "customvalidation" => "my error message.",
    );

    public function __construct($translator, $data, $rules, $messages = array(), $customAttributes = array())
    {
        parent::__construct($translator, $data, $rules, $messages, $customAttributes);
        $this->setCustomMessages($this->custom_messages);
    }

    public function validateCustomvalidation($attribute, $value, $parameters = null)
    {
        // validation code here
    }

}
于 2014-09-10T10:22:57.233 回答
2

也许这段代码更好:

// for example I am using sub-array custom at default validation file, but you can do it in other file as you wishes.
..other..
'custom' => array(
        'email' => array(
            'required' => 'We need to know your e-mail address!',
        ),
        "required"         => "Hey!!! don't forget at :attribute field is required.",
    ),
..other..

// you can determine your custom languages at your wishes file
$messages = \Lang::get('validation.custom');

Validator::make($input, $rules, $messages);
于 2014-03-07T18:04:52.780 回答
1

如果要使用 app/lang/xx/validation.php 中的自定义验证消息数组,正确的方法如下:

'custom' => array(
    'formFieldName' => array(
        'postcode' => 'error message for PostCode rule',
        'iamalwayslowercase' => 'error message for this rule'
    ),
),

请注意,您使用表单字段的名称,然后在数组中使用规则的小写名称。

于 2014-06-30T17:20:22.303 回答
1

文档

在某些情况下,您可能希望在语言文件中指定自定义消息,而不是直接将它们传递给验证器。为此,请将您的消息添加到 app/lang/xx/validation.php 语言文件中的自定义数组中。

'custom' => array(
    'email' => array(
        'required' => 'We need to know your e-mail address!',
    ),
),

这意味着,在你的情况下,

'custom' => array(
    'postcode' => array(
        'PostCode' => 'error message for PostCode rule',
        'required' => 'error message for required rule',
    ),
),
于 2014-05-18T10:57:39.297 回答
0

下面的代码也可以完美运行,注意$customValidatorMessages数组索引上的下划线。希望它可以帮助某人:-)

class CoreValidator extends Illuminate\Validation\Validator
{
    /**
     * The array of custom validator error messages.
     *
     * @var array
     */
    protected $customValidatorMessages = array(); 

    public function validatePostcode($attribute, $value, $parameters = null)
    {
        $regex = "/^((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))$/i";
        if(preg_match($regex ,$value)) {
            return true;
        }

        $this->customValidatorMessages['post_code'] = 'Postcode error message.';

        $this->setCustomMessages($this->customValidatorMessages);

        return false;
    }
}
于 2015-03-19T11:53:37.827 回答