Я пытаюсь использовать атрибуты проверки в "language> {language}> validation.php", чтобы заменить: имя атрибута (имя ввода) на правильное для чтения имя (пример: 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-адреса или установить язык по умолчанию, чтобы он просто не отображался там?
Ответы:
Ага, атрибуты «красивого имени», как вы это назвали, были настоящей «проблемой» несколько месяцев назад. Надеюсь, эта функция теперь реализована, и ею очень просто пользоваться.
Для простоты я разделю два варианта решения этой проблемы:
Глобальный. Вероятно, более распространенный. Этот подход очень хорошо объясняется здесь, но в основном вам нужно отредактировать файл проверки application / language / XX / validation.php, где XX - это язык, который вы будете использовать для проверки.
Внизу вы увидите массив атрибутов; это будет ваш массив атрибутов "красивого имени". Следуя вашему примеру, конечный результат будет примерно таким.
'attributes' => array('first_name' => 'First Name')
На местном уровне Это то, о чем Тейлор Отвелл говорил в номере, когда говорит:
Это совершенно верно, и если вы проверите исходный код, вы увидите
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 есть действительно классное репо есть котором есть много готовых языковых пакетов. Определенно вам стоит это проверить.
Надеюсь это поможет.
источник
'name' => 'Customer name'
а в другой - возможно'name'=>'Seller name'
. Я предпочитаю иметь переводы для каждого модуля, поэтому я могу повторно использовать эти значения также в качестве меток для полей формы. Следовательно, я голосую за локальное решение, но как тогда мне получить этот массив $ niceNames из моего языкового файла? И как мне вызвать,setAttributeNames
не создавая новый экземпляр Validator, но используя метод $ this-> validate (), который доступен в контроллерах?$this->validate(Request $request, $rules, $messages, $customAttributes)
чтобы иметь эти красивые имена. См. Это в Laravel 5.1 API - запрос на подтверждение$validator = Validator::make(Input::all(), $rules);
$validator->setAttributeNames($niceNames);
$validator->setAttributeNames(Lang::get('my-language-file'))
.Правильный ответ на эту конкретную проблему - перейти в папку app / lang и отредактировать файл validation.php, в нижней части файла есть массив с именем attributes :
/* |-------------------------------------------------------------------------- | 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 ),
Поэтому я считаю, что этот массив был создан специально для настройки этих имен атрибутов.
источник
'attributes' => [ 'name' => 'nombre', 'mail' => 'correo', 'password' => 'contraseña', 'password2' => 'confirmación de contraseña', ],
Начиная с 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
источник
В массиве «атрибутов» ключ - это имя входа, а значение - это строка, которую вы хотите показать в сообщении.
Пример, если у вас есть такой ввод
<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()
методу ключ "регистрации" (или что-то еще, что вы используете), как это@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>
источник
<input type="text" name="txt[]" />"
. Ошибка выдаст что-то вродеThe txt.0 is required.
. Как можно заменить его красивыми именами?В Laravel 4.1 простой способ сделать это - зайти в папку lang -> ваш язык (по умолчанию en) -> validation.php.
Если это есть в вашей модели, например:
'group_id' => 'Integer|required', 'adult_id' => 'Integer|required',
И вы не хотите, чтобы ошибка была «введите идентификатор группы», вы можете создавать «хорошие» сообщения проверки, добавляя настраиваемый массив в 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
метода.Более подробную информацию об ошибках и языках можно найти здесь Проверка и локализация .
источник
Я использую свои пользовательские языковые файлы в качестве входных данных для таких "красивых имен" :
$validator = Validator::make(Input::all(), $rules); $customLanguageFile = strtolower(class_basename(get_class($this))); // translate attributes if(Lang::has($customLanguageFile)) { $validator->setAttributeNames($customLanguageFile); }
источник
В Laravel 7.
use Illuminate\Support\Facades\Validator;
Затем определите niceNames
$niceNames = array( 'name' => 'Name', );
И последнее, просто поместите $ niceNames в четвертый параметр, например:
$validator = Validator::make($request->all(), $rules, $messages, $niceNames);
источник
Атрибут: может использовать только имя атрибута (в вашем случае 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!', );
источник
$customAttributes = [ 'email' => 'email address', ]; $validator = Validator::make($input, $rules, $messages, $customAttributes);
источник
Что ж, это довольно старый вопрос, но мне не следует указывать на то, что проблема появления языка в 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;
источник