Как сделать пользовательский объект доступным на страницах в CodeIgniter? - PullRequest
1 голос
/ 15 марта 2011

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

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

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

Ответы [ 2 ]

6 голосов
/ 15 марта 2011

В этом моем блоге подробно рассказывается о том, как конкретно использовать 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()

2 голосов
/ 15 марта 2011

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

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

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

class RegisteredUserController extends CI_Controller {
    var $user;

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

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

...