对于名为/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
,所以它正在发生。但是,真正的问题是:
使用Laravel的MessageBag实例不能做同样的事情吗?
在表单验证期间,如果发生错误,则会显示错误,并且如果我刷新页面,该错误将消失。因此,我不能使用该方法在页面中带来相同的行为吗?
答案 0 :(得分:0)
您可以这样做
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 :(得分:0)
示例1
要设置错误,请使用
return redirect()->back()->withErrors('my message');
要访问刀片服务器中的错误
@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所示进行访问