Валидация локализации с массивами ввода в laravel 5?

Для динамической формы, в которую можно добавлять и изменять поля:

сообщить

<input name="gallery[1][title]">
<input name="gallery[1][text]">
.
.
.
<input name="gallery[n][title]">
<input name="gallery[n][text]">

в контроллере для проверки:

'gallery.*.file' => 'nullable|image',
'gallery.*.title' => 'nullable|string',

в файле локализации:

Я никогда не знаю, сколько будет в массиве.

'gallery.*.text' =>  'text of gallery 1',
'gallery.*.title' =>  'title of gallery 1',

как я могу написать это?

Я хочу что-то подобное в результатах:

название галереи 1

,

,

,

название галереи n

2 ответа

Обновление в laravel 7

ваш_язык / validation.php

es it / validation.php

'attributes' => [
       'gallery.*.file' => 'Your custom message!!',
    ],

Вот хакерский способ сделать это. К сожалению, в настоящее время laravel не поддерживает добавление общих заменителей сообщений для определенных токенов, так что вот что вы можете сделать:

В контроллере:

$replacer = function ($message, $attribute) {
    $index = array_get(explode(".",$attribute),1);
    $message = str_replace(":index",$index,$message);
    //You may need to do additional replacements here if there's more tokens
    return $message;
}
$this->getValidationFactory()->replacer("nullable", $replacer);
$this->getValidationFactory()->replacer("string", $replacer);
$this->getValidationFactory()->replacer("image", $replacer);
$v = $this->getValidationFactory()->make($request->all(), $rules);
if ($v->fails()) {
   $this->throwValidationException($request, $v); //Simulate the $this->validate() behaviour
}

Вы также можете добавить заменители в сервис-провайдере, чтобы они были доступны на всех маршрутах, но, к сожалению, вам нужно регистрировать их для каждого правила, для которого вы хотите, чтобы они были доступны.

В файле локализации:

'gallery.*.text' =>  'text of gallery :index',
'gallery.*.title' =>  'title of gallery :index',

Необходимо изменить форму и проверку контроллера

Сообщить

 {!! Form::open(['url' => 'actionURL']) !!}
    {{ csrf_field() }}
      <input name="gallery[]">

    {!! Form::close() !!}

В контроллере

  foreach ($request->gallery as $key => $gallery) {        
       $validator = Validator::make(array('gallery => $gallery),
                array('gallery' => 'required'));        
}
Другие вопросы по тегам