Я создал пользовательскую функцию ошибки, создав класс;
<?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 Я знаю, что уже существует метод проверки регулярных выражений, но эта проблема для меня более общая.
Я думаю, что я его взломал.
Я добавил сообщение в основной массив в 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; } }