访问 Laravel 中的错误

Access the errors in Laravel

我对名为 /home 的路由具有以下功能:

public function home(){
  if(Session::has("user_id")){
        return view("home");
    }else{
        return view("welcome", [
            'error_message' => "Please log in to access that page!"
        ]);
    }
}

然后,在我的 welcome 视图中,我显示这样的错误:

<div class="alert alert-danger alert-dismissible fade show" role="alert">
<p> {{ $error_message }} </p>
</div>

一切都按预期工作,但当我一次又一次刷新页面时,错误不断出现。我知道变量还没有 unset 所以它正在发生。但是,真正的问题是:

Can't I do the same using MessageBag instance of Laravel?

在表单验证期间,如果发生错误,错误就会显示出来,如果我刷新页面,错误就会消失。那么,我不能使用该方法在我的页面中带来相同的行为吗?

你可以这样做

public function home(){
    if(Session::has("user_id")){
       return view("home");
    }else{
       return view("welcome")->with('error_message', 'Please log in to access the page');
    }
}

@if(!empty($error_message))
  <div class="alert alert-success"> {{ $error_message }}</div>
@endif

示例 1

设置错误使用

return redirect()->back()->withErrors('my message');

要访问 blade 中的错误,请使用

@if ($errors->any())
<div class="alert alert-danger">
    <ul class="mb-0">
        @foreach($errors->all() as $error)
            <li>{!! $error !!}</li>
        @endforeach
    </ul>
</div>
@endif

是的,使用重定向而不是在同一路由上返回不同的视图,因为它更清晰。

示例 2 但是如果你想努力学习它,像这样设置警报

session()->flash('alert', 'your message');

并像这样访问它

<div class="alert alert-success"> {{ session('alert') }}</div>

示例 3

如果你想使用 MessageBag,你只需要抛出一个特殊的异常

throw ValidationException::withMessages([
            'message' => ['my message here'],
        ])->status(400);

并访问它,如示例 1 所示