Codeigniter: лучшая практика для просмотра сеанса доступа - PullRequest
1 голос
/ 26 декабря 2010

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

Рекомендуется ли обращаться к переменным сеанса в представлении?

т.

// in the view
<?php if ($this->session->userdata('is_logged_in') : ?>
  // stuff

<?php endif; ?>

Ответы [ 5 ]

4 голосов
/ 28 декабря 2010

Прямой ответ на ваш реальный вопрос прост: да, это нормально, чтобы получить доступ к переменным сеанса внутри представления.Потому что сеанс или регулярный, они являются именно этой переменной.Место для хранения информации.

Я делаю это довольно часто, используя $this->session->flashdata для отображения сообщений в определенной области представления внутри заголовка.

Причина, по которой я это говорю, заключается в том, чтодругие, кажется, пропускают ваш фактический вопрос, чтобы узнать, почему вы задали вопрос: «где лучшее место для проверки подлинности?»для которого ответ Кадмуса прямо на голову того, как я справляюсь с этим также, но опять же, не думайте, что вы не должны получать доступ к «данным» сеанса из представления, но проверка на аутентификацию должна произойти на уровне контроллера наверняка.

3 голосов
/ 26 декабря 2010

Если вы не хотите помещать такого рода «логику» в представление (хорошая вещь IMO), вам нужно, но в контроллере.Таким образом, само представление тоже станет чище:

<?php if($logged_in): ?>
do stuff
<?php else: ?>
do different
<?php endif; ?>

с $ logged_in, полученным из представления, которое выполняет всю работу сеанса.Вы можете написать свой собственный контроллер, который расширяется от контроллера CI, чтобы классы расширяли ваш контроллер, или абстрагировать его до отдельного класса Session, который имеет некоторые статические методы.Я думаю, что расширение контроллера CI с вашей собственной логикой кажется наиболее чистым способом, если вы выполняете много сеансов.

1 голос
/ 08 января 2011

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

<?php if (is_logged_in()) : ?>
     <!--your html code -->
<?php else ?>
     <!--more html code -->
<?php endif;?>

затем в вашем помощнике, который называется access_helper, например, у вас есть:

<?php
      function is_logged_in() { 
        return $this->session->user_data('is_logged_in');
      }
?>
0 голосов
/ 07 января 2017

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

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

 public function __construct() {
    parent::__construct();
    if (!$this->session->userdata('user_data')) {
        return redirect('login');
    } else {
               redirect('dashboard');
           }

    $this->load->model('customer_model');
}

и сообщение об успешном или неудачном отображении я использую флэш-данные.

private function _falshAndRedirect($successful, $successMessage, $failureMessage) {
    if ($successful) {
        $this->session->set_flashdata('feedback', $successMessage);
        $this->session->set_flashdata('feedback_class', 'alert-success');
    } else {
        $this->session->set_flashdata('feedback', $failureMessage);
        $this->session->set_flashdata('feedback_class', 'alert-danger');
    }
    return redirect('customer/view_customer');
}

здесь я использую приватную функцию, чтобы получить мое сообщение для просмотра.

затем вы создаете функции, и эти функции автоматически получают «покрытие сеанса».

Надеюсь, это поможет.

0 голосов
/ 27 января 2013

Невозможно получить доступ к переменной сеанса от помощника. Самый простой - получить доступ к переменной сеанса из представления.

<?php if ($this->session->user_data('is_loggen_in'): ?>
    <!-- HTML stuff -->
<?php endif; ?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...