Как сделать пользовательский объект доступным на страницах в CodeIgniter?

StackOverflow https://stackoverflow.com/questions/5316624

Вопрос

Я довольно новичок в Codeigniter и использую Ion Auth для авторизации пользователя. С библиотекой Ion Auth, вы получаете пользовательский объект, как:

  $user = $this->ion_auth->get_user();
  echo $user->email;

Если пользователь вошел в систему, я хочу, чтобы объект пользователя $ был доступен на любой из страниц (на любой из контроллеров). Как я могу это сделать? (Я использую codeigniter 2)

Это было полезно?

Решение

Этот мой пост в блоге Вдается много подробно в конкретно, используя Ion_auth, чтобы все ваше приложение (включая представления) для доступа к информации вашего текущего пользователя.

Короткая версия ... (специально для темы под рукой)

Добавление этого в ваш MY_Controller.php файл

class User_Controller extends CI_Controller {

    protected $the_user;

    public function __construct() {

        parent::__construct();

        if($this->ion_auth->logged_in()) {
            $data->the_user = $this->ion_auth->get_user();
            $this->the_user = $data->the_user;
            $this->load->vars($data);
        }
        else {
            redirect('/');
        }
    }
}

Затем в вашем приложении просто создайте свой контроллер, как это

class App_Controller extends User_Controller {

    public function __construct() {
        parent::__construct();
    }

    function index() {
        //do stuff
    }
}

Тогда не только в вашем контроллере у вас будет доступ к $this->the_user Но у вас также будет $the_user загружен в каждый вид с $this->load->vars()

Другие советы

Обычно вы закричали что -то подобное на сессии, однако я отошел от этого в большинстве моих приложений CI.

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

Одна вещь, которую я нашел, это помогает базовые контроллеры. Анкет Например, у меня есть зарегистрированный Любой контроллер, чьи действия требуют, чтобы пользователь был введен в систему, расширил это. Таким образом, я могу держать зарегистрированную проверку и такие вещи, как получить пользовательские данные в одном месте (в конструкторе). Например:

class RegisteredUserController extends CI_Controller {
    var $user;

    function  __construct()  {
        parent::__construct();
            $this->user = $this->ion_auth->get_user();
        }
}

Тогда любой контроллер, который расширяется RegisteredUserController вместо контроллера может добраться до пользователя с $this->user. Анкет Следуя этой шаблоне получает его на каждой странице (которая расширяет контроллер), не прибегая к кэшированию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top