Laravel: Показать или скрыть содержимое в зависимости от переменной Session - PullRequest
0 голосов
/ 14 мая 2019

Я делаю просмотр с защитой паролем. В основном, когда вы получаете доступ к этому ресурсу, у вас есть представление, которое указывает, что вам нужно ввести пароль. Правильное поведение этого должно быть

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

Но, используя метод представления, я действительно буду признателен за умение.

Затем, когда пользователь нажимает кнопку, я вызываю следующую функцию:

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 голосов
/ 14 мая 2019

Как сказал мне Дэн в комментариях, я устанавливал в false значение переменной сеанса.Итак, сначала я удаляю \Session::flash('passedPassword', false); во время метода show.

Затем я модифицирую логику своего блейда.В моем случае иногда требуется пароль, а иногда нет.

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

При этом, если у ресурса нет пароля, мы пропускаем пользователя.Или в случае, если у него есть пароль, а также у нас есть переменная passPassword, мы также позволяем пользователю просматривать содержимое.

...