Laravel:根据Session变量显示或隐藏内容

时间:2019-05-14 08:06:50

标签: php laravel laravel-5 laravel-blade

我正在执行一个具有密码保护的视图。基本上,当您访问该资源时,您会看到一个视图,指示您需要输入密码。 正确的行为应该是

  1. 您访问视图
  2. 用户输入密码并发送POST表单
  3. 如果该方法使用特定值重定向回,则您必须查看页面的真实内容。

所以我的刀片服务器代码如下:

@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
        ));
    }
}

但是,即使密码正确,我仍然可以看到密码视图,但flash / session变量从未到达视图。

我有什么想念的地方吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

正如Dan在评论中告诉我的那样,我将false设置为session变量的值。 因此,首先我在show方法期间删除了\Session::flash('passedPassword', false);

然后,我修改刀片的逻辑。就我而言,有时需要密码,有时则不需要。

@if (($passwordLength === 0) || ($passwordLength !== 0 && Session::has('passedPassword')))

这样,如果资源没有密码,我们会让用户通过。或者,如果它具有密码,并且还具有passedPassword变量,则还可以让用户看到内容。