【发布时间】:2019-10-01 04:52:14
【问题描述】:
我正在做一个有密码保护的视图。基本上,当您访问该资源时,您会看到一个表明您需要输入密码的视图。 正确的行为应该是
- 您访问视图
- 用户输入密码并发送 POST 表单
- 如果该方法以特定值重定向回来,您必须看到页面的真实内容。
所以我的刀片代码如下:
@if ($passedPassword = Session::get('passedPassword'))
...here goes the real/true view content
@else
<section class="questionnaire-questions">
<div>
<form
action="{{ route('questionnaire.password', ['questionnaire' => $questionnaire->id]) }}"
method="POST">
{{ csrf_field() }}
<h3 class="text-center">@lang('questionnaire.password.advice')<h3>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="goal-input-group numeric">
<label>PASSWORD</label>
<input
style='visibility: visible;'
name="password"
type="password"
>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" class="goal-btn goal-btn-lg goal-btn-artic-blue">@lang('questionnaire.password')</button>
</div>
</form>
</div>
</section>
@endif
该视图使用以下方法呈现:
public function show(Questionnaire $questionnaire) {
$data = [];
$data['questionnaire'] = $questionnaire;
\Session::flash('passedPassword', false);
return view('questionnaires.show', array('data' => $data));
}
在前面的方法中,我传递了passedPassword,但我找不到将它作为flash 变量传递的方法。如果有办法添加像
return back()->with(array(
'passedPassword' => false
));
但如果使用 view 方法,我将非常感激。
然后,当用户点击按钮时,我调用下一个函数:
public function password(Request $request, Questionnaire $questionnaire) {
if (strcmp($questionnaire->password, $request->input('password')) == 0) {
return back()->with(array(
'passedPassword' => false
));
}
}
但即使密码正确,我也得到了密码视图,闪存/会话变量从未到达视图。
我有什么遗漏或做错了吗?
提前致谢。
【问题讨论】:
-
会话变量是
false。人们应该期望视图逻辑的@else分支总是被执行。您可以改为为变量刷新truthy值 -
passedPassword始终为false,因为您在调用视图之前将其覆盖。 -
是的,我需要它,因为有时视图可以有密码,有时没有
标签: php laravel laravel-5 laravel-blade