我通过创建一个类来创建自定义错误函数;
<?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);
});
一切正常,但它返回的错误信息是
validation.postcode
如何/在何处为此设置自定义错误消息?
我尝试过设置 app / lang / en / validation.php (两者都没有);
'custom' => array(
"validation.postcode" => "my error message 1",
"postcode" => "my error message 2"
)
P.S。我知道有一个正则表达式验证方法,但这个问题对我来说更通用。
答案 0 :(得分:7)
我想我已经破解了它。
我将消息添加到 app / lang / en / validation.php 中的主数组中,而不是添加到自定义子数组中。
return array(
...
"url" => "The :attribute format is invalid.",
"postcode" => "my error message 2",
...
)
如果这不是正确的方法,那么有人可以自由纠正我。
答案 1 :(得分: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
}
}
答案 2 :(得分: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);
答案 3 :(得分:1)
在某些情况下,您可能希望在语言文件中指定自定义消息,而不是直接将它们传递给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',
),
),
答案 4 :(得分:1)
如果你想在app / lang / xx / validation.php中使用自定义验证消息数组,正确的方法如下:
'custom' => array(
'formFieldName' => array(
'postcode' => 'error message for PostCode rule',
'iamalwayslowercase' => 'error message for this rule'
),
),
请注意,您使用表单字段的名称,然后在数组中使用规则的小写名称。
答案 5 :(得分: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;
}
}