4 Stimmen

CakePHP Auth zusätzliche Daten abrufen

Ich lerne gerade CakePHP, also entschuldigen Sie mich

Ich bin mit CakePHP 1.2.5 Auth Komponente mit UsersController. Das Benutzermodell enthält zwei Tabellen:

class User extends AppModel {
    var $name = 'User';
    var $belongsTo = 'Company';
}

Wenn login() aufgerufen wird, sehe ich, dass die Daten im SQL-Protokoll abgerufen werden (LEFT JOIN wird ausgeführt), also scheint das Modell korrekt, aber Auth speichert nur die Daten von users Tisch und lässt alles andere fallen. Wie kann ich die Unternehmensdaten später abrufen, ohne eine zusätzliche Abfrage durchzuführen?

4voto

jpdelatorre Punkte 3473

Oder wenn Sie sich nicht wohl dabei fühlen, die Kernbibliothek zu ändern, wie ich, können Sie auch...

zu Ihrem UsersController.login Aktion

function login() {
    if ($this->Auth->user()) {
        $Session->write('Company', $this->User->Company->findById($this->Auth->user('id')));
        $this->redirect($this->Auth->redirect());
    }

}

Sie können auf Unternehmensdetails zugreifen über $this->Session->read('Company.name') auf Ihrem Controller und $session->read('Company.name') über Ihre Ansichten. Vergessen Sie nicht, hinzuzufügen Session Komponente und Hilfsmittel.

2voto

Funky Dude Punkte 3697

In cake/libs/controller/components/auth.php auf Zeile 819, sollte es sein

$data = $model->find(array_merge($find, $conditions), null, null, 0);

Versuchen Sie, es zu ändern in

$data = $model->find(array_merge($find, $conditions), null, null, 1);

grundsätzlich rekursiv auf 1 setzen möglicherweise müssen Sie dies auch an einigen anderen Stellen tun.

1voto

Leo Punkte 6575

Besser als eine Änderung des Kerns ist ein eindämmbares Verhalten: http://book.cakephp.org/view/474/Containable . Unten auf der Seite finden Sie ein Beispiel für ein Benutzerprofil.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X