FormRequest не заполняет $ request-> old () после ошибки проверки - PullRequest
3 голосов
/ 04 апреля 2019

Мой объект запроса не получает данные old (), когда форма не проходит проверку.Я получаю сообщения об ошибках, но ни один из старых входных данных.

Я прочитал несколько решений по аналогичным вопросам, в которых говорится о внесении изменений в перенаправление на контроллере, но это не решит эту проблему, потому что перенаправление выполняется функцией, указанной ниже в классе FormRequest, ине контроллер.

Кто-нибудь еще сталкивался с такой же проблемой?Я обновил свой экземпляр, когда я прочитал несколько форумов, которые ссылались на существующие ошибки, но проблема все еще существует.

Любая помощь будет оценена.

Версии: Я пробовал это на laravel 5.4, 5.7 и 5.8, и ни один из них не рендерит старые данные.

Как я выполняю проверку запросов Проверка выполняется через стандартный файл запросов, который расширяет FormRequest.

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CustomerManagementRequest extends FormRequest {
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize() {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules() {
        return [
            'first_name' => 'required|min:2',
            'last_name' => 'required|min:2',
            'email' => 'required|min:4',
        ];
    }

}

Как я пытаюсь получить доступ к старым данным в моем представлении:

value="{{old('first_name')}}"

Перенаправление и проверка выполняются в FormRequest Перенаправление выполняется через стандартный класс FormRequest Laravel.

protected function failedValidation(Validator $validator)
{
    throw (new ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl());
}

Ответ валидатора: Это то, что я вижу, когда я изменяю указанную выше функцию.У него есть данные моей формы.

Validator {#629 ▼
  #data: array:11 [▼
    "_token" => "1ynKXxi551UBGbJq6ftLsW6VsClZzmbZdHiHIxyt"
    "active_from_date" => "04/04/2019 10:58 PM"
    "last_sync_date" => "04/04/2019 11:00 PM"
    "first_name" => "Pizza"
    "last_name" => "Dough"
    "email" => null
    "full_phone" => null
    "phone" => null
  ]
}

vardumping старый параметр () в представлении возвращает пустой массив []

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

После проверки вы должны проверить, все проверки пройдены или нет.В методе контроллера вы можете сделать так:

$validator = Validator::make($request->all(), $rules);

if ($validator->fails()) {
    $messages = $validator->errors()->getMessages();
    return back()
           ->withErrors($messages)
           ->withInput();
}

Надеюсь, это поможет:)

1 голос
/ 05 апреля 2019

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

У меня было специальное промежуточное ПО под названием ViewData, в конце которого находилась команда session () -> save (), которая сохраняла поверх прошитых данных, в результате чего мой массив старых входных данных был пустым.

Вот как я это сделал для тех из вас, кто устраняет подобную проблему.

Сначала я попытался создать ручную проверку в своем контроллере, чтобы устранить проблему сСформироватьЗапрос.Затем я последовал за валидатором к промежуточному программному обеспечению ShareErrorsFromSession в ядре.

Я понял, что у меня есть промежуточное программное обеспечение, которое работает после этого промежуточного программного обеспечения (я называю его ViewData), и это промежуточное программное обеспечение хранит некоторые переменные для сеанса.

protected $middlewareGroups = [
        'web' => [

            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            //\Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\ViewData::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

Я пролистал и нашел сеанс () -> сохранить ().Это сохранение сохранено за работу, выполняемую withInput, по существу, оставляя старый пустой.Я удалил сеанс сохранения (так как он не имел значения) и теперь old () содержит ожидаемые данные.

...