2012-04-05 2 views
0

Ich verwende das Modul Auth mit ORM-Treiber und systemeigenen Sitzungen.Kohana 3.2 Verwenden von Auth-Modul für mehrere Datenbanken

Die Datenbankkonfiguration 'default' und 'customer_1' existiert in application/config/database.php.

Bevor Anmeldung ändern i die Standarddatenbank Config mit:

Kohana::$config->load('database')->default = Kohana::$config->load('database')->get('customer_1');

Dies funktioniert vor Modul Auth Login!

Nachdem die Standard-Datenbank-Konfigurationseinstellung:

if (Auth::instance()->login($_POST['username'], $_POST['password']) === TRUE) { Request::current()->redirect(); }

Dies führt zu dem folgenden Fehler:

Table 'default_database.users' doesn't exist [ SHOW FULL COLUMNS FROM `users` ]

Aus irgendeinem Grund es die anfängliche Standard-Datenbank-Konfiguration verwenden.

Meine Frage: Wie stelle ich die Standarddatenbank für Module Auth ein?

Antwort

1

Lassen Sie uns das ein wenig folgen.

Sie verwenden ORM/Auth und nicht nur Auth. ORM in ORM/Auth ist so konfiguriert, dass die Standarddatenbank verwendet wird, wenn keine angegeben ist. Sie können diese Option überschreiben, indem Sie $ _db_group in der Datei ORM.php überladen.

Verwenden wir Kohanas kaskadierendes Dateisystem, um das zu überschreiben. Erstellen Sie eine neue Datei: classes/auth.php. Fügen Sie diesen Code ein:

<?php 
class ORM extends Kohana_ORM { 
    $_db_group = Kohana::$config->load('database')->get('customer_1'); 
} 

Alle festgelegt.

+0

Hey, vielen dank für Ihre Antwort Gaurav Patel. Der Code wäre: class ORM extends Kohana_ORM { \t function __construct() { \t \t $this->_db_group = Kohana::$config->load('database')->get('customer_1'); \t } } Aber wenn Auth :: Instanz() aufgerufen wird, führt dies zu einem Fehler:

Class 'Auth' not found

+0

Haben Sie das Auth-Modul in der Bootstrap laden? – gspatel

1

Wenn Sie möchten, dass das Auth-Modul eine andere Datenbank als andere Modelle verwendet, sollten Sie $_db_group verwenden, wie von Gaurav Patel vorgeschlagen. Allerdings sollten Sie nur Auth ORM-Modelle (Benutzer, Rolle und user_token) außer Kraft setzen, nicht ORM Klasse:

APPATH/classes/Modell/user.php:

class Model_User extends Model_Auth_User 
{ 
    protected $_db_group = 'customer_1'; 
} 

APPATH/classes/Modell/role.php :

class Model_Role extends Model_Auth_Role 
{ 
    protected $_db_group = 'customer_1'; 
} 

APPATH/classes/Modell/user/token.php:

class Model_User_Token extends Model_Auth_User_Token 
{ 
    protected $_db_group = 'customer_1'; 
} 
+0

Das funktioniert perfekt! Wie kann ich jedoch $ _db_group vor dem Aufruf von Auth :: instance() -> login() ändern? –

+0

ORM-Klasse erweitern, einen Setter für '$ _db_group' hinzufügen und rufen Sie vor der Anmeldung – matino

+0

ich diese tryed habe, aber es tut den Trick: APPATH/classes/Auth/ORM: ' Klasse Auth_ORM erstreckt Kohana_Auth_ORM { \t public function set_db_group ($ db_group) \t { \t \t $ this -> _ db_group = $ db_group; \t} } ' Und vor dem Aufruf von' Auth :: Instanz() -> login() ': ' Auth :: Instanz() -> set_db_group ('customer_2'); 'Es ist auch nicht, dass Auth Modul verwendet eine andere Datenbank als andere Modelle, die ganze Anwendung ändert sich in eine andere Datenbank, aber Modulde Auth bleiben nur mit dem Standard. –