我通过创建一个类创建了一个自定义错误函数;
<?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"
)
附言:我知道已经有正则表达式验证方法了,但这个问题对我来说更为普遍。
我想我已经破解了。
我在app/lang/en/validation.php中将消息添加到主数组中,而不是添加到自定义子数组中。
return array(
...
"url" => "The :attribute format is invalid.",
"postcode" => "my error message 2",
...
)
如果这不是正确的方式,那么有人可以纠正我。
您可以使用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
}
}
也许这段代码更好:
// 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);
来自文档:
在某些情况下,您可能希望在语言文件中指定自定义消息,而不是将它们直接传递给Validator。为此,请将消息添加到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',
),
),
如果您想使用app/lang/xx/validation.php中的自定义验证消息数组,正确的方法如下:
'custom' => array(
'formFieldName' => array(
'postcode' => 'error message for PostCode rule',
'iamalwayslowercase' => 'error message for this rule'
),
),
请注意,您使用表单字段的名称,然后在数组中使用规则的小写名称。
下面的代码也很好用,请注意$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;
}
}