@Yadalay
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel

Как внести изменения в Request после валидации?

Здравствуйте!
Знающие и разбирающиеся люди, помогите мне, пожалуйста, разобраться.
Есть вот такой код обработки регистрации:
public function store(Request $request)
{
    $rules = [
        // Всякие правила.
    ];

    $validator = Validator::make($request->except(['_token']), $rules);

    if ($validator->fails()) {
        return redirect('registration')->withErrors($validator)->withInput();
    }

    /* Вот это мне нужно внести в Request */
    $birthday = $request->input('birthday');
    $birthday = implode('.', $birthday);
    /* ---------------------------------- */

    User::create($request->except(['_token']));
    return redirect('registration/success');
}

Вопрос:
1. Как мне внести изменение ($birthday) в Request перед или после валидации?
2. Почему, используя withInput, не сохраняются данные в полях после редиректа?
3. Как мне ещё сделать свою проверку на правильность подтверждения пароля: в правилах как-то записать или писать своё условие?
Вот пример html кода:
<div class="form-group">
    <label for="password" class="col-sm-5 control-label">Пароль:</label>
    <div class="col-sm-7">
        <input id="password" name="password" type="password" class="form-control">
    </div>
</div>
<div class="form-group">
    <label for="password_repeat" class="col-sm-5 control-label">Подтверждение пароля:</label>
    <div class="col-sm-7">
        <input id="password_repeat" name="password_repeat" type="password" class="form-control">
    </div>
</div>

А это html-пояснение того, почему так обрабатывается поле "Дата рождения":
<div class="form-group">
    <label class="col-sm-5 control-label">Дата рождения:</label>
    <div class="col-sm-7">
        <div class="row">
            <div class="col-sm-3">
                <input name="birthday[]" type="text" class="form-control" placeholder="Day">
            </div>
            <div class="col-sm-4">
                <input name="birthday[]" type="text" class="form-control" placeholder="Month">
            </div>
            <div class="col-sm-5">
                <input name="birthday[]" type="text" class="form-control" placeholder="Year">
            </div>
        </div>
    </div>
</div>
  • Вопрос задан
  • 328 просмотров
Решения вопроса 1
Denormalization
@Denormalization
1) Можно получить $request->all() и уже в получившийся массив записывать новый birthday, а затем уже валидировать. Но лучше тут написать свой кастомный валидатор, чтобы он валидировал исходный birthday.
2) Потому что эти данные нигде не выводятся. Нужно в полях добавить value="{{ old('password') }}":
<input id="password" name="password" type="password" class="form-control" value="{{ old('password') }}">

3) Есть правило "confirmed", которое как раз проверяет подтверждение поля:
$rules = [
  'password' => 'required|confirmed'
];

Оно смотрит есть ли поле password_confirmation и совпадает ли оно с полем password
Изучаем имеющиеся правила валидации https://laravel.com/docs/5.2/validation#available-...

4) Делать $request->except(['_token']) не обязательно. (тут User::create($request->except(['_token']));)
Лучше в User прописать $fillable поля, тогда не будет никаких проблем с сохранением.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы