Laravel: не получается после валидации массива прописать в поля формы старые значения, если данные это ассоциативный массив

191
03 декабря 2018, 03:40

Есть документ something.blade.php, где есть форма.
В форме есть 3 поля: name['az'], name['ru'], name['en'].
Я отправляю всё в контроллер и валидирую. Если данные не провалидировались, то меня возвращает на ту же страницу и пишет ошибки. Если это не ассоциативный массив, то пишет все ошибки нормально. А если ассоциативный, то вывести ошибки и старые значения не выходит.

Вот фрагмент кода:

<label for="name['en']"
       class="col-md-4 col-form-label text-md-right">{{ __('Name EN') }}</label>
<div class="col-md-6">
    <input id="name['en']" type="text"
           class="form-control{{ $errors->has('name[\'en\']') ? ' is-invalid' : '' }}"
           name="name['en']" value="{{ old('name[\'en\']') }}" autofocus>
    @if ($errors->has('name[\'en\']'))
        <span class="invalid-feedback" role="alert">
        <strong>{{ $errors->first('name[\'en\']') }}</strong>
    </span>
    @endif
</div>

Как я понимаю, ошибка в том, что я неправильно подаю значения. Если это так, то как правильно подать? А если не так, то в чем дело?

Answer 1

В Laravel есть удобная валидация массивов, вот документация.

В вашем случа чтобы провалидировать все 3 поля name['az'], name['ru'], name['en'] должен работать этот вариант:

$validator = Validator::make($request->all(), [
    'name.*' => 'required|string|unique:users',
]);

Аналогично, вы можете использовать символ * при указании своих сообщений проверки в своих языковых файлах, что делает его легким для использования одного сообщения проверки правильности для полей на основе массива:

'custom' => [
    'name.*' => [
        'unique' => 'Каждый пользователь должен иметь уникальное имя',
    ]
],
Answer 2

Правильный метод таков:

<label for="name['en']" 
	   class="col-md-4 col-form-label text-md-right">{{ __('Name EN') }}</label> 
 
<div class="col-md-6"> 
	<input id="name['en']" type="text" 
		   class="form-control{{ $errors->has('name.' . '\'en\'') ? ' is-invalid' : '' }}" 
		   name="name['en']" value="{{ old('name.' . '\'en\'') }}" autofocus> 
	@if ($errors->has('name.' . '\'en\'')) 
		<span class="invalid-feedback" role="alert"> 
		<strong> This field is required </strong> 
	</span> 
	@endif 
</div> 
</div>

READ ALSO
PHP - Oracle DataBase 12c

PHP - Oracle DataBase 12c

Что я делаю: Верстаю сайт на PHP, хочу в качестве БД использовать Oracle (не спрашивайте почему

176
Как загрузить фотки с фронтенда?

Как загрузить фотки с фронтенда?

Имеются плагины https://octobercmscom/plugin/fireunion-blogfront и https://octobercms

185
Как изменить информацию в базе данных через php

Как изменить информацию в базе данных через php

у меня есть форма для заполнения данных пользователем на которой выводится статья и информация о нейВыглядит она так:

171
Проблема с выборкой данных из бд mysql

Проблема с выборкой данных из бд mysql

Сразу к делуЕсть задача вывести из бд на странице например: список книг и рядом должен быть автор(имя автора) конкретной книги

161