Я пытаюсь использовать атрибуты проверки в «language> {language}> validation.php», чтобы заменить имя атрибута (имя ввода) для правильного чтения имени (пример: first_name> First name). Это кажется очень простым в использовании, но валидатор не показывает «хорошие имена».
У меня есть это:
'attributes' => array( 'first_name' => 'voornaam' , 'first name' => 'voornaam' , 'firstname' => 'voornaam' );
Для отображения ошибок:
@if($errors->has()) <ul> @foreach ($errors->all() as $error) <li class="help-inline errorColor">{{ $error }}</li> @endforeach </ul> @endif
И проверка в контроллере:
$validation = Validator::make($input, $rules, $messages);
Массив $ messages:
$messages = array( 'required' => ':attribute is verplicht.' , 'email' => ':attribute is geen geldig e-mail adres.' , 'min' => ':attribute moet minimaal :min karakters bevatten.' , 'numeric' => ':attribute mag alleen cijfers bevatten.' , 'url' => ':attribute moet een valide url zijn.' , 'unique' => ':attribute moet uniek zijn.' , 'max' => ':attribute mag maximaal :max zijn.' , 'mimes' => ':attribute moet een :mimes bestand zijn.' , 'numeric' => ':attribute is geen geldig getal.' , 'size' => ':attribute is te groot of bevat te veel karakters.' );
Может кто-нибудь сказать мне, что я делаю неправильно. Я хочу, чтобы имя атрибута было заменено «хорошим именем» в массиве атрибутов (язык).
Благодаря!
РЕДАКТИРОВАТЬ:
Я заметил, что проблема в том, что я никогда не устанавливал язык по умолчанию для своих проектов Laravel. Когда я устанавливаю язык в «NL», код выше работает. Но, когда я устанавливаю свой язык, язык появится в URL-адресе. И я предпочитаю, чтобы этого не случилось.
Итак, мой следующий вопрос: возможно ли удалить язык из URL-адреса или задать язык по умолчанию, чтобы он просто не появился?
Yeahh, атрибуты «хорошего имени», как вы его назвали, были реальной «проблемой» несколько месяцев назад. Надеемся, эта функция теперь реализована и очень проста в использовании.
Для простоты я разберу два варианта решения этой проблемы:
Глобальный Вероятно, более распространенный. Этот подход очень хорошо объяснен здесь, но в основном вам нужно отредактировать файл проверки приложения / языка / XX / validation.php, где XX – это язык, который вы будете использовать для проверки.
Внизу вы увидите массив атрибутов; это будет ваш массив атрибутов «nice name». Следуя вашему примеру, конечным результатом будет что-то вроде этого.
'attributes' => array('first_name' => 'First Name')
Локально Это то, о чем говорил Тейлор Отуэлл в этом вопросе, когда он говорит:
Теперь вы можете вызвать setAttributeNames в экземпляре Validator.
Это совершенно верно, и если вы проверите исходный код, вы увидите
public function setAttributeNames(array $attributes) { $this->customAttributes = $attributes; return $this; }
Итак, чтобы использовать этот способ, см. Следующий простой пример:
$niceNames = array( 'first_name' => 'First Name' ); $validator = Validator::make(Input::all(), $rules); $validator->setAttributeNames($niceNames);
Ресурсы
В Github есть действительно потрясающий репо, в котором есть много языков, готовых к работе. Определенно вы должны это проверить.
Надеюсь это поможет.
Правильный ответ на эту конкретную проблему состоял бы в том, чтобы перейти в вашу папку app / lang и отредактировать файл validation.php в нижней части файла, там есть массив с атрибутами :
/* |-------------------------------------------------------------------------- | Custom Validation Attributes |-------------------------------------------------------------------------- | | The following language lines are used to swap attribute place-holders | with something more reader friendly such as E-Mail Address instead | of "email". This simply helps us make messages a little cleaner. | */ 'attributes' => array( 'username' => 'The name of the user', 'image_id' => 'The related image' // if it's a relation ),
Поэтому я считаю, что этот массив был создан для индивидуальной настройки этих имен атрибутов.
Начиная с Laravel 5.2 вы могли бы …
public function validForm(\Illuminate\Http\Request $request) { $rules = [ 'first_name' => 'max:130' ]; $niceNames = [ 'first_name' => 'First Name' ]; $this->validate($request, $rules, [], $niceNames); // correct validation
В массиве «attributes» ключ – это имя ввода, а значение – строка, которую вы хотите показать в сообщении.
Пример, если у вас есть вход, подобный этому
<input id="first-name" name="first-name" type="text" value="">
Массив (в файле validation.php) должен быть
'attributes' => array( 'first-name' => 'Voornaam'),
Я пробовал то же самое, и он отлично работает. Надеюсь это поможет.
РЕДАКТИРОВАТЬ
Также я замечаю, что вы не передаете параметр в $errors->has()
поэтому, возможно, это проблема.
Чтобы исправить эту проверку в контроллере, если у вас есть такой код
return Redirect::route('page')->withErrors(array('register' => $validator));
то вы должны передать методу has()
ключ «register» (или все, что вы используете), как это
@if($errors->has('register') .... //code here @endif
Другой способ отображения сообщений об ошибках – это следующий, который я предпочитаю (я использую Twitter Bootstrap для дизайна, но, конечно, вы можете изменить его с помощью собственного дизайна)
@if (isset($errors) and count($errors->all()) > 0) <div class="alert alert-error"> <h4 class="alert-heading">Problem!</h4> <ul> @foreach ($errors->all('<li>:message</li>') as $message) {{ $message }} @endforeach </ul> </div>
Атрибут: может использовать только имя атрибута (first_name в вашем случае), а не красивые имена.
Но вы можете определить настраиваемые сообщения для каждого атрибута + валидацию с помощью определенных сообщений:
$messages = array( 'first_name_required' => 'Please supply your first name', 'last_name_required' => 'Please supply your last name', 'email_required' => 'We need to know your e-mail address!', 'email_email' => 'Invalid e-mail address!', );
Поздний ответ, но может помочь кому-то
В Laravel 4.1 простой способ сделать это – перейти в папку lang -> ваш язык (по умолчанию en) -> validation.php
а затем, например, когда у вас в вашей модели
`'group_id' => 'Integer|required', 'adult_id' => 'Integer|required',`
И не хотите, как ошибку, please enter a group id
Вы можете создать «хорошие» сообщения проверки, добавив в validation.php к настраиваемому массиву, поэтому в нашем примере пользовательский массив будет выглядеть так:
` 'custom' => array( 'adult_id' => array( 'required' => 'Please choose some parents!', ), 'group_id' => array( 'required' => 'Please choose a group or choose temp!', ), ),`
Это также работает с многоязычными приложениями, вам просто нужно отредактировать (создать) правильный файл проверки языка.
Язык по умолчанию хранится в файле конфигурации app / config / app.php и по умолчанию используется по-английски. Это можно изменить в любое время с помощью метода App :: setLocale.
Более подробную информацию об ошибках и языках можно найти здесь: проверка и локализация
Я использую свои пользовательские языковые файлы как Input для «хороших имен» следующим образом:
$validator = Validator::make(Input::all(), $rules); $customLanguageFile = strtolower(class_basename(get_class($this))); // translate attributes if(Lang::has($customLanguageFile)) { $validator->setAttributeNames($customLanguageFile); }
Ну, это довольно старый вопрос, но мне мало кто должен указать, что проблема наличия языка, появляющегося в URL-адресе, может быть решена путем:
config/app.php
; Если это необходимо для продолжения сеанса, я в настоящее время использую «AppServiceProvider» для этого, но, я думаю, что промежуточное ПО может быть лучшим подходом, если требуется изменить язык по URL-адресу, поэтому мне это нравится у моего провайдера:
if(!Session::has('locale')) { $locale = MyLocaleService::whatLocaleShouldIUse(); Session::put('locale', $locale); } \App::setLocale(Session::get('locale'));
Таким образом, я обрабатываю сессию, и она не прилипает к моему URL.
Чтобы уточнить, я использую Laravel 5.1+, но не должен отличаться от 4.x;