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

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

файл лезвия:

<div class="tab-content" id="pills-tabContent">
    <div class="tab-pane fade {{ $tabName == 'yes' ? 'show active' : '' }}" id="pills-yes" role="tabpanel" aria-labelledby="pills-yes-tab">
        @include('secciones.formulario-contacto-reserva')
    </div>
    <div class="tab-pane fade {{ $tabName == 'no' ? 'show active' : '' }}" id="pills-no" role="tabpanel" aria-labelledby="pills-no-tab">
        @include('secciones.formulario-contacto-sin-reserva')
    </div>
</div>

Я пытаюсь отправить параметры в свое представление, когда проверка не выполняется в пользовательском запросе:

ContactWithoutBookingRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;

use Illuminate\Foundation\Http\FormRequest;

class ContactWithoutBookingRequest 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 [
            'inputNameSurname' => 'required|max:255',
            'inputEmail' => 'required|email|max:255',
            'selectMessage' => 'required|numeric|max:2',
            'inputComment' => 'required|max:3000|min:5',
            'privacityCheck' => 'required|boolean',
            'g-recaptcha-response' => 'required|captcha'       
        ];
    }
}

Я пытался переопределить методы: failedValidation и getRedirectUrl, но безуспешно...

protected function getRedirectUrl()
{
    return redirect()->back()->with(['tabName' => 'no']);
}

protected function failedValidation(Validator $validator)
{
        throw (new ValidationException($validator))
                    ->errorBag($this->errorBag)
                    ->redirectTo(route('contacto'), ['tabName' => 'no']);
}

Как этого добиться? спасибо


person Sociopath    schedule 21.02.2020    source источник


Ответы (2)


Вы можете прошить его в сеанс в методе failedValidation:

protected function failedValidation(Validator $validator)
{
    $this->session->flash('tabName', 'no');

    throw (new ValidationException($validator))
        ->errorBag($this->errorBag)
        ->redirectTo($this->getRedirectUrl());
}

А затем извлеките его из сеанса в вашем представлении:

<div class="tab-content" id="pills-tabContent">
    <div class="tab-pane fade {{ Session::get('tabName') == 'yes' ? 'show active' : '' }}" id="pills-yes" role="tabpanel" aria-labelledby="pills-yes-tab">
        @include('secciones.formulario-contacto-reserva')
    </div>
    <div class="tab-pane fade {{ Session::get('tabName') == 'no' ? 'show active' : '' }}" id="pills-no" role="tabpanel" aria-labelledby="pills-no-tab">
        @include('secciones.formulario-contacto-sin-reserva')
    </div>
</div>
person Remul    schedule 21.02.2020
comment
Совсем забыл, что все, что отправляется с перенаправлением, должно быть получено с сеансом, большое спасибо! - person Sociopath; 21.02.2020

Попробуйте так:

return redirect(
    route('get.user.index', ['param' => $param])
)->with('success', 'Message if you need');

'get.user.index' - это ваш маршрут

['param' => $param] - это массив, который вы хотите поместить в маршрут

person Adam Kozlowski    schedule 21.02.2020
comment
Не работает, он говорит, что Class App\Http\Requests\ContactWithoutBookingRequest не существует, если я его добавлю - person Sociopath; 21.02.2020