Отобразить сообщение об ошибке для пользовательской проверки в Laravel 4

Я создал пользовательскую функцию ошибки, создав класс;

<?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" ) 

PS Я знаю, что уже существует метод проверки регулярных выражений, но эта проблема для меня более общая.

Related of "Отобразить сообщение об ошибке для пользовательской проверки в Laravel 4"

Я думаю, что я его взломал.

Я добавил сообщение в основной массив в 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. Для этого добавьте свои сообщения в пользовательский массив в файле языка приложения / 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; } }