Convalida della sessione del costruttore per diverse funzioni

Sto facendo una convalida nel mio costruttore che controlla se l’utente ha iniziato una sessione.

Sto quindi lanciando alcuni controller per varie cose.

La mia domanda è – posso avere alcuni dei controller non interessati dalla funzione construct (validazione della sessione), o devo portarlo in un altro file? Il motivo è che mi piacerebbe avere due set di funzioni nel costruttore – uno per quando l’utente è loggato, e il resto quando non lo sono.

Avevo due file e passavo da uno all’altro, ma poi ho deciso di combinarli in uno.

Grazie

Quello che devi fare è configurare un controller di base che si occuperà della sessione per te e dividerà i tuoi controllori registrati da quelli disconnessi via ereditarietà.

Il mio suggerimento per voi è dare un’occhiata al post di Phil Sturgeon su Keeping It Dry . Nel suo post, Phil spiega le nozioni di base su come implementare i controller in modo tale che il controller padre si occuperà delle sessioni in modo da non doverle controllare ogni volta.

Come esempio:

mio_controllore:

class MY_Controller extends CI_Controller{ function __construct(){ parent::__construct(); //do things in here that ALL controllers should do. } } 

MY_In_Controller:

 class MY_In_Controller extends MY_Controller{ function __construct(){ parent::__construct(); //if user doesnt have the session redirect them out NOW! } } 

MY_Out_Controller:

 class MY_Out_Controller extends MY_Controller{ function __construct(){ parent::__construct(); //if the user has the session, redirect them in NOW. } } 

Controller di accesso:

 class Login extends MY_Out_Controller{ function __construct(){ parent::__construct(); } function index(){ //folks that have a session (already logged in) will never even get here. //because the parent class MY_Out_Controller already redirected them back in. } } 

Gestisci controller:

 class Manage extends MY_In_Controller{ function __construct(){ parent::__construct(); } function index(){ //folks that don't a session (logged out) will never even get here. //because the parent class MY_In_Controller already redirected them out. } } 

In breve, non scrivere i controlli di sessione direttamente nei controller. Lo scriverai troppo spesso e violerai il Principio ASCIUTTO .

Aggiornamento: raccomando di revampare il metodo di Phil usando il metodo di Shane Pearson nelle Classi Base di CodeIgniter Revisited .

Come affermato in precedenza, perché non si utilizzano diversi controller di base diversi per scopi specifici.

Ti suggerirei in questo modo per te

prendiamo due parti uno diciamo controller frontend che non richiede sessione e un altro controller diciamo controller backend che necessita di sessione Now,

 //application/core/Front_controller.php class Front_Controller extends MY_Controller { function __construct() { parent::__construct(); } } 

un’altra class in core / backend_controller

 class backend_Controller extends MY_Controller { function __construct() { parent::__construct(); $this->load->library('session'); } } 

ora puoi estendere il front_controller per quei controller che non hai bisogno di sessione ed estendi il controller back-end che richiede la sessione dall’applicazione / controller