Frage

Ich bin ziemlich neu bei CodeIgniter und verwende Ion Auth für die Benutzerautorisierung. Mit der Ion Auth -Bibliothek erhalten Sie ein Benutzerobjekt wie:

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

Wenn ein Benutzer angemeldet ist, möchte ich, dass das $ User -Objekt auf einer der Seiten (in einem der Controller) verfügbar ist. Wie kann ich das machen? (Ich verwende Codesigniter 2)

War es hilfreich?

Lösung

Dieser Blog -Beitrag von mir Gehen Sie insbesondere mit Ion_Auth aus, um Ihre gesamte Anwendung (einschließlich Ansichten) zu ermöglichen, auf die Informationen Ihres aktuellen Benutzers zuzugreifen.

Die Kurzversion ... (speziell für das vorliegende Thema)

Hinzufügen dies zu Ihrem MY_Controller.php Datei

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('/');
        }
    }
}

Erstellen Sie dann in Ihrer Anwendung einfach Ihren Controller wie diesen

class App_Controller extends User_Controller {

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

    function index() {
        //do stuff
    }
}

Dann haben Sie dann nicht nur in Ihrem Controller Zugriff auf $this->the_user Aber Sie werden auch haben $the_user in jede Ansicht geladen mit $this->load->vars()

Andere Tipps

Normalerweise würden Sie so etwas in der Sitzung zwischengespeichert, aber ich habe mich in den meisten meiner CI -Apps davon abgehalten.

Ein Beispiel: Sie protokollieren den Benutzer in (zwischen den Benutzerdaten) und gehen dann, um seine E -Mails auf ihrer Profilseite zu aktualisieren. Sie müssen jetzt Ihren Cache neu laden. Viele andere Dinge könnten dieses Nachladen antreiben. Normalerweise ist die ID das meiste, das ich weiter -Cache -Cache hat. Dann mache ich das, was Sie tun, und erhalte die Daten des Benutzers auf jeder Seite, die ich benötige.

Eine Sache, die ich fand, die hilft, ist zu haben Basicontroller. Zum Beispiel habe ich einen registriertenUserController. Jeder Controller, dessen Aktionen alle erfordert, dass der Benutzer angemeldet wird, erweitern dies. Auf diese Weise kann ich die protokollierten Schach und Dinge wie die Nutzungsdaten an einem Ort (im Konstruktor) in Schach halten. Zum Beispiel:

class RegisteredUserController extends CI_Controller {
    var $user;

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

Dann jeder Controller, der sich erstreckt RegisteredUserController anstelle von nur Controller kann zum Benutzer mit erreichen $this->user. Das Befolgen dieses Musters würde es auf jeder Seite (die den Controller erweitern) ohne das Caching erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top