首页 > 解决方案 > Laravel - 在重定向时请求验证松散错误

问题描述

我有一个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正在加载时,这个错误包已经是空的了。

标签: phplaravelsessionredirect

解决方案


在你的控制器中试试这个,假设函数是创建的

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

推荐阅读