【问题标题】:Flash Error message when Validation Fails while using FormResquest使用 FormResquest 时验证失败时闪烁错误消息
【发布时间】:2020-01-18 03:25:36
【问题描述】:

我正在使用 FormRequest 进行验证。我正在尝试通过 Flash 设置顶级错误消息,以向用户显示表单提交未成功。

现在我有以下 UserResquest

class UserRequest 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|string|min:2|max:50',
            'last_name' => 'required|string|min:2|max:50',
            'date_of_birth' => 'required|date',
            'gender' => 'required|in:male,female'
        ];
    }

我正在尝试在我的控制器中执行此操作

$validator = $request->validated();

        if ($validator->fails()) {
            Session::flash('error', $validator->messages()->first());
            return redirect()->back()->withInput();
        }

但 Flash 消息显示为空。 使用FormRequest 时设置 Flash 错误消息的最佳方法是什么

我正在按照视图模板设置我的 Flash 消息。

<div class="flash-message">
                @foreach (['danger', 'warning', 'success', 'info'] as $msg)
                    @if(Session::has('alert-' . $msg))
                        <p class="alert alert-{{ $msg }}">{{ Session::get('alert-' . $msg) }} <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a></p>
                    @endif
                @endforeach
            </div> <!-- end .flash-message -->

【问题讨论】:

  • 您不需要在控制器中执行此操作。 FormRequest 是自动的吗
  • @N69S 在哪里可以设置?还是在视图中显示?
  • 如果有适合您的答案,请将您的问题标记为已回答。

标签: laravel validation laravel-5 laravel-6


【解决方案1】:

FormRequest 自动执行,您不必在控制器中处理它。

这样做是在

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

如果你想要其他行为,你可以重载方法。

要获取错误信息,您需要在错误包中获取它

{{ $errors->default->first('first_name') }}

错误包默认命名为default,您可以在FormRequest扩展类中更改它

自定义消息

要设置每个错误的消息,请在 UserRequest 类中声明以下方法

public function messages()
{
    return [
        'first_name.required' => 'A first name is required',
        'first_name.min'  => 'The first name can\'t be a single character',
        ...
    ];
}

要知道是否有错误,请检查刀片中的变量$errors-&gt;default,然后您可以显示消息“表单未保存。检查下面的错误并重试”

【讨论】:

  • 有什么方法可以设置消息?或者我怎样才能在视图中显示它?任何特定的语法?显示成功消息。只有错误有问题
  • 好吧,我想我不清楚。我收到字段级错误消息。我正在尝试设置表单 Flash 消息,例如..“表单未保存。检查下面的错误并重试”
  • @HarshaMV 在答案中添加了更多详细信息
  • 我更新了我对如何尝试显示 Flash 消息的看法。我认为您正在尝试显示字段错误。我正在尝试为表单设置顶级消息,以便人们知道提交不成功。
  • @HarshaMV 只是做@if($errors-&gt;default-&gt;any()) 或只是@if($errors-&gt;any()) 猜它适用于所有人
【解决方案2】:

正如 N69S 指出的那样。我们可以在failedValidation下设置如下。

/**
     * Handle a failed validation attempt.
     */
    protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
    {
        session()->flash('alert-danger', 'There was an error, Please try again!');
        return parent::failedValidation($validator);
    }

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2015-04-17
    • 2020-05-10
    • 2011-09-05
    • 1970-01-01
    • 2018-06-14
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多