在我的laravel
-app应用程序中,用户如果想要订阅新闻通讯,可以选中联系表单上的复选框。选中复选框并提交表单后,控制器中会进行检查,如果用户已被订阅,如果已订阅,则将显示一个闪烁的警报/消息,并带有“您已被订阅”之类的信息。
现在,检查本身可以正常工作,但是没有显示flash / alert消息,我也不知道为什么。
在我看来:
@if (\Session::has('success'))
<div class="alert alert-success">
<p>{{ \Session::get('success') }}</p>
</div>
@endif
@if (\Session::has('failure'))
<div class="alert alert-danger">
<p>{{ \Session::get('failure') }}</p>
</div>
@endif
<div class="contact-form" id="contact">
<form method="POST" action="{{ route('contact.store') }}">
...
</form>
</div>
以及在我的控制器中:
// when the checkbox is checked!
if (!empty(request()->newsletter)) {
if (!Newsletter::isSubscribed(request()->email)) {
Newsletter::subscribePending(request()->email);
return redirect()->route('contact.create')->with('success', 'Thanks for subscribing!');
} else {
return redirect()->route('contact.create')->with('failure', 'You are already subscribed');
}
}
有人可以帮我吗?
答案 0 :(得分:6)
您似乎正在使用会话类,而不是会话帮助程序laravel插入服务容器。
如果您使用的是Laravel 5.8,则根据此处的文档,blade中的session是一个辅助功能:
https://laravel.com/docs/5.8/responses#redirecting-with-flashed-session-data
示例
Route::post('user/profile', function () {
// Update the user's profile...
return redirect('dashboard')->with('status', 'Profile updated!');
});
因此像这样在刀片中使用辅助功能:
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
注意:只有在使用页面提交时,此选项才有效。如果是使用javascript提交,则可能需要刷新页面以显示警报。
答案 1 :(得分:0)
我认为您应该将值作为数组['success'=>'Thanks for subscribing!'
传递,试试看。
if (!empty(request()->newsletter)) {
if (!Newsletter::isSubscribed(request()->email)) {
Newsletter::subscribePending(request()->email);
return redirect()->route('contact.create')->with(['success'=>'Thanks for subscribing!']);
} else {
return redirect()->route('contact.create')->with(['failure'=> 'You are already subscribed']);
}
}
答案 2 :(得分:0)
@if (Session::has('success'))
<div class="alert alert-success">
<p>{{Session::get('success') }}</p>
</div>
@endif
@if (Session::has('failure'))
<div class="alert alert-danger">
<p>{{ Session::get('failure') }}</p>
</div>
@endif
我喜欢这样,您可以尝试
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if (session('failure'))
<div class="alert alert-danger">
{{ session('failure') }}
</div>
@endif
然后编辑您的控制器
if (!empty(request()->newsletter)) {
if (!Newsletter::isSubscribed(request()->email)) {
Newsletter::subscribePending(request()->email);
return redirect()->route('contact.create')->with(['success'=> 'Thanks for subscribing!']);
} else {
return redirect()->route('contact.create')->with(['failure'=>'You are already subscribed']);
}
}
这样,它将返回一个数组而不是一个对象
答案 3 :(得分:0)
您可以使用WithMessage
而不是with
传递值,因此在控制器中您将像这样return back()->withMessage('Thanks for subscribing');
进行重定向,然后在刀片中可以使用
@if (session('message'))
<div class="alert alert-success">
{{ session('message') }}
</div>
@endif
对于错误消息,我将亲自使用laravel的验证器,以便您可以访问此类错误
@if($errors->any())
<div class="form-group">
@foreach($errors->all() as $error)
<div class="alert alert-danger">
<ul>
<li> {{ $error }} </li>
</ul>
</div>
@endforeach
</div>
@endif
就像@Niklesh Raut提到的那样,您还可以将其设置为数组并像刀片中的@if
语句一样访问它们
答案 4 :(得分:0)
如果以上答案仍未获得理想的结果,则应检查您的请求是否通过了验证。
尝试在验证后对请求进行dd(),看看是否从请求中得到结果。
如果问题出在会话的刷新上,这就是我喜欢的方式。
if (!empty(request()->newsletter)) {
if (!Newsletter::isSubscribed(request()->email)) {
Newsletter::subscribePending(request()->email);
Session::flash('message', 'Thanks for subscribing!');
Session::flash('alert-class', 'alert-success');
return redirect()->route('contact.create');
} else {
Session::flash('message', 'You are already subscribed!');
Session::flash('alert-class', 'alert-danger');
return redirect()->route('contact.create');
}
}
然后在视图中,我将此代码块用于消息。
@if(Session::has('message'))
<div class="form-group row">
<div class="col-6">
<p class="alert {{ Session::get('alert-class', 'alert-info') }}">{{
Session::get('message') }}</p>
</div>
</div>
@endif
不要忘记在控制器顶部引用该会话!
use Session;
答案 5 :(得分:0)
在我的情况下,会话闪存仅适用于表单提交并返回redirect()。
我正在研究Laravel 5.8
-控制器
class HomeController extends Controller
{
public function index()
{
return view('welcome');
}
public function test(Request $request)
{
return redirect()->back()->with(['success' => 'Thanks for subscribing']);
}
}
Route::get('/home', 'HomeController@index');
Route::post('/test', 'HomeController@test');
@if ($message = session('success'))
<div class="alert alert-success alert-block">
<strong>{{ $message }}</strong>
</div>
@endif