Come rendere oggetto utente disponibile tra le pagine in CodeIgniter?
-
24-10-2019 - |
Domanda
Sono abbastanza nuovo per CodeIgniter e sto usando Ion Auth per l'autorizzazione dell'utente. Con la libreria Ion Auth, si ottiene un oggetto utente, come:
$user = $this->ion_auth->get_user();
echo $user->email;
Se un utente è connesso, voglio l'oggetto utente $ per essere disponibile su qualsiasi delle pagine (in nessuno dei controllori). Come posso fare questo? (Sto usando CodeIgniter 2)
Soluzione
Questo post del blog del mio va in un sacco di dettagli in modo specifico utilizzando Ion_Auth per consentire l'intera applicazione (incluse le viste) per accedere alle informazioni tuo attuale dell'utente.
La versione breve ... (in particolare per l'argomento a portata di mano)
L'aggiunta di questo al vostro file 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('/');
}
}
}
Poi nell'applicazione basta creare il controller come questo
class App_Controller extends User_Controller {
public function __construct() {
parent::__construct();
}
function index() {
//do stuff
}
}
Quindi, non solo nel controller si avrà accesso a $this->the_user
, ma si avrà anche $the_user
caricato in ogni vista con $this->load->vars()
Altri suggerimenti
Normalmente ci si memorizza nella cache qualcosa di simile nella sessione, ma ho spostato lontano da che nella maggior parte delle mie applicazioni CI.
Un esempio: si accede l'utente nella (caching dei dati utente) e poi vanno ad aggiornare la loro e-mail sulla loro pagina di profilo. Ora avete voi per ricaricare la cache. Molte altre cose potrebbero guidare questo reload. Di solito il più io di cache più è l'ID, poi faccio quello che stai facendo e ottenere i dati dell'utente in qualsiasi pagina, ne ho bisogno.
Una cosa che ho trovato che aiuta è quello di avere controller di base . Per esempio ho un RegisteredUserController. Qualsiasi controller cui azioni tutto richiedono all'utente di essere registrato in estendere questo. In questo modo posso mantenere il login controllo e le cose come ottenere i dati degli utenti in un punto (nel costruttore). Ad esempio:
class RegisteredUserController extends CI_Controller {
var $user;
function __construct() {
parent::__construct();
$this->user = $this->ion_auth->get_user();
}
}
Quindi qualsiasi controller che si estende RegisteredUserController
invece di controller può raggiungere l'utente con $this->user
. Seguendo questo schema sarebbe scarica su ogni pagina (che si estende il controller) senza ricorrere alla cache.