У меня есть специальный файл запроса в http/requests, который обрабатывает проверку.

Если проверка не проходит, по умолчанию она должна перенаправить обратно с $errors в представлении (которое генерируется \Illuminate\View\Middleware\ShareErrorsFromSession::class), и я вижу, что ошибки находятся в сеансе, пока отладка, но после того, как этот запрос с кодом 302 завершится и запрос 200 сгенерирован, ошибки в сеансе будут потеряны.

Что может вызвать эту проблему? Спасибо

Код:

<?php

namespace App\Http\Requests;
<..>
class AnswerQuestionnaireRequest extends FormRequest
{
    private $questionRepository;

    /**
     * AnswerQuestionnaireRequest constructor.
     */
    public function __construct(QuestionRepository $qs)
    {
        parent::__construct();
        $this->questionRepository = $qs;
    }

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        $rules = [];
        foreach ($this->questionRepository->getAll() as $question){
            $index = "question-" . $question->id;
            $rules[$index] = "required|in:1,2";
        }

        return $rules;

    }

    public function messages()
    {
        return [
            'question-1.required' => __("Incorrect value"),
            'question-2.required'  => __("Incorrect value"),
        ];
    }

}


class QuestionnairesController extends Controller
{

    public function __construct(QuestionnairesService $questionnairesService, QuestionRepository $questionRepository)
    {
        $this->questionnairesService = $questionnairesService;
        $this->questionRepository = $questionRepository;
    }

    public function show(Request $request){
        $questions = $this->questionRepository->getAll();
        return view("client/questionnaire", compact("questions"));
    }

    public function store(AnswerQuestionnaireRequest $request){
        var_dump($request);
    }

РЕДАКТИРОВАТЬ: Проверяя с помощью Xdebug, вы можете видеть, что проверка сработала, но только для запроса, который возвращает код 302 и перенаправляет обратно. https://gyazo.com/231c83910f6e57748e1b705ade74e383 И при загрузке запроса 200 этот пакет ошибок там уже пуст.

2
Tautvydas 2 Янв 2019 в 14:01

2 ответа

Лучший ответ

Обертывание всего в routes / web.php на «Route :: group (['middleware' => ['web']], function () {» устранило проблему.

Я думал, что все в файле web.php уже назначено промежуточному программному обеспечению "WEB" ...

0
Tautvydas 2 Янв 2019 в 18:53

В вашем контроллере попробуйте это, предполагая, что функция создает

use Illuminate\Http\Request;
public function create(Request $request){
    $this->validate($request,[
    'field'=>'required|present',
    'another_field'=>'required|present',
    ]);
   Post::create($request);
}

Обратите внимание, что $ this-> validate (), если есть ошибка проверки, он автоматически перенаправляется обратно на предыдущий URL-адрес с отправленными сообщениями об ошибках. Blade Затем вы можете проверить наличие ошибок таким образом

@if($errors->has('fieldName'))
    <small class="text-danger form-text">{{$errors->first('fieldName')}}</small>
@endif
1
spartyboy 2 Янв 2019 в 11:21