Comment faire l'objet utilisateur disponible sur plusieurs pages dans CodeIgniter?
-
24-10-2019 - |
Question
Je suis assez nouveau pour CodeIgniter et j'utilise Ion Auth pour l'autorisation de l'utilisateur. Avec la bibliothèque Ion Auth, vous obtenez un objet utilisateur comme:
$user = $this->ion_auth->get_user();
echo $user->email;
Si un utilisateur est connecté, je veux l'objet utilisateur $ soit disponible sur l'une des pages (dans l'un des contrôleurs). Comment puis-je faire ceci? (J'utilise CodeIgniter 2)
La solution
Ce billet de blog de la mine va dans beaucoup de détails en utilisant spécifiquement Ion_Auth pour permettre à votre application entière (y compris les vues) pour accéder aux informations de votre utilisateur.
La version courte ... (en particulier pour le sujet à portée de main)
L'ajout de ce fichier à votre 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('/');
}
}
}
Ensuite, dans votre application il suffit de créer votre contrôleur comme ceci
class App_Controller extends User_Controller {
public function __construct() {
parent::__construct();
}
function index() {
//do stuff
}
}
Alors, non seulement dans votre contrôleur vous avez accès à $this->the_user
mais vous aurez également $the_user
chargé dans toutes les vues avec $this->load->vars()
Autres conseils
Normalement, vous auriez cache quelque chose comme ça dans la session, mais je suis passé loin de que dans la plupart de mes applications de CI.
Un exemple: vous vous connectez l'utilisateur (la mise en cache les données utilisateur) et puis ils vont mettre à jour leurs e-mails sur leur page de profil. Vous devez maintenant vous recharger le cache. Beaucoup d'autres choses pourraient conduire ce reload. Habituellement, le plus je en cache plus est l'ID, alors je fais ce que vous faites et obtenir les données de l'utilisateur sur une page je en ai besoin.
Une chose que je trouve qui aide est d'avoir contrôleurs de base . Par exemple, j'ai un RegisteredUserController. Tout contrôleur dont les actions exigent tous que l'utilisateur soit connecté prolonger ce. De cette façon, je peux garder le contrôle et connecté des choses comme obtenir les données de l'utilisateur dans un seul endroit (dans le constructeur). Par exemple:
class RegisteredUserController extends CI_Controller {
var $user;
function __construct() {
parent::__construct();
$this->user = $this->ion_auth->get_user();
}
}
Ensuite, un contrôleur qui s'étend RegisteredUserController
au lieu de contrôleur juste peut obtenir à l'utilisateur avec $this->user
. À la suite de ce modèle obtiendrait sur chaque page (qui étend le contrôleur) sans avoir recours à la mise en cache.