Laravel-请求重定向时验证松散错误

时间:2019-01-02 11:01:34

标签: php laravel session redirect

我在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 个答案:

答案 0 :(得分:1)

在控制器中尝试此操作,假设该函数已创建

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。 刀片 然后,您可以通过这种方式检查错误

@if($errors->has('fieldName'))
    <small class="text-danger form-text">{{$errors->first('fieldName')}}</small>
@endif

答案 1 :(得分:0)

将routes / web.php中的所有内容包装为“ Route :: group(['middleware'=> ['web']]],函数(){”解决了该问题。

我认为web.php文件中的所有内容都已分配给“ WEB”中间件...