2010-12-16 9 views
0

Nehmen wir an, ich habe eine Tabelle mit Benutzer. Jede Zeile in dieser Tabelle ist somit ein Benutzer. Der wichtige Teil hier ist die Plural vs Singularform.Ein "Problem" mit den Namenskonventionen des Zend Framework Autoloaders umgehen

Nun schauen wir uns an die wir Modelle für diese in Zend Framework einzurichten:

class Model_Users extends Zend_Db_Table_Abstract 
{ 
    protected $_name  = 'users'; 
    protected $_primary = 'user_id'; 
} 

nun weiter, lassen Sie uns annehmen, dass wir ein anderes wollen Benutzer anderes Objekt als die Standard-Reihe am Zend_Db_Table zurückgekehrt, aber wir möchten trotzdem seine Funktionalität behalten, einfach erweitern. Es wäre dann sinnvoll, zu implementieren und einen einzigen Benutzernamen wie:

class Model_User extends Zend_Db_Table_Row_Abstract 
{ 
    ... Bunch of cool functions here :) 
} 

Wir haben dann protected $_rowClass = 'Model_User'; zum Model_Users Klasse nur hinzufügen, und wir sind fertig ... Normalerweise dass würde der Fall sein, aber Es scheint hier ein Problem zu geben, wie Zend Framework die Klassen automatisch lädt. Da wir die Ordnerstruktur /defaut/models/foo.php haben und die Klasse innerhalb dieser Model_Foo benennen können. Der Ordner hat einen Pluralnamen, aber die Klasse hat einen Singular. Dies scheint ein Problem zu werden, wenn ich die oben genannte Struktur haben möchte. Seit Zend Framework scheint nicht in der Lage zu sein zwischen den UserModel.php und UsersModel.php zu unterscheiden.

So ist die Frage nach dieser langen und etwas poetischen Frage ist:

Gibt es eine Möglichkeit, dies zu umgehen ohne Starten enthält manuell bedienen?

+0

Ich bin nicht 100% sicher, was Sie versuchen zu umgehen ... Ich werde versuchen, indem wir Ihnen ein Beispiel, wie ich ein Setup – gnarf

Antwort

1

Eigentlich ist es empfehlenswert, Ihre Tabellenklassen im db Ordner innerhalb von Modellen zu platzieren, also wäre es models/dbtable/users.php und Klassenname Model_DbTable_Users für Tabelle und models/user.php und Model_User für konkrete Benutzer. Aber wenn Sie sich entscheiden, das zu überspringen, sehe ich nicht das Problem, model/user.php mit Model_User und models/users.php mit Model_Users als Tabelle zu haben.

+0

Das Problem, dass Zend Framework antwortet mit der Aussage: Schwerwiegender Fehler: Klasse 'Model_Users' nicht gefunden in ... Wenn ich beide Dateien manuell einbezieht, funktioniert alles gut. Und wenn ich die Namen von ihnen ändere, damit sie nicht kollidieren, funktioniert es auch gut. – inquam

0

me off Lassen Sie zunächst sagen, ich habe nie die Struktur /model Verzeichnis Auto-Laden-Verzeichnis verwendet. Ich persönlich bevorzuge es, meine Modelle in eine "Bibliothek" zu stellen, die ich für diese Anwendung erstelle. Hier ist ein Auszug aus meinem application.ini

includePaths.library = APPLICATION_PATH "/../library"  
autoloadernamespaces[] = "SNTrack_" 

Mein Benutzer würde /library/SNTrack/Model/User.phpSNTrack_Model_User und lokalisiert werden. Ich würde die TabelleSNTrack_Model_UserTable anrufen.

+0

ich, dass Tabellen- und Zeilenklasse würde antworten Habe dies für Kernfunktionen in meiner Anwendung. Aber für modulspezifische Dinge werden die Modelle im Ordner models angezeigt, da jedes Modul bis auf die Kernfunktionalität komplett eigenständig ist. – inquam

0

Sieht aus wie eine Standard-Autoloader-Sache.

Stellen Sie sicher, den Autoloader zu initialisieren, wahrscheinlich in Bootstrap.php, wie etwas mit:

protected function _initAutloader() 
{ 
    $autoloader = new Zend_Application_Module_Autoloader(array(
     'basePath' => APPLICATION_PATH, 
      'namespace' => '', 
    )); 
} 

Dann in application/models/User.php Sie Ihre Klasse Model_User definieren. Und in application/models/Users.php definieren Sie Ihre Klasse Model_Users.

Alles sollte in Ordnung sein.#FamousLastWords ;-)