ein „Problem“ mit den Namenskonventionen Umgebung vom Zend Framework Autoloader verwendet

StackOverflow https://stackoverflow.com/questions/4463771

  •  11-10-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen, dass ich eine Tabelle mit Nutzer . Jede Zeile in dieser Tabelle ist also ein Nutzer . Der wichtige Teil ist hier der Plural vs Singularform.

Lassen Sie uns nun einen Blick auf 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';
}

Jetzt wollen wir weiter davon aus, dass wir einen weiteren wollen Benutzer Objekt andere als die Standard-Reihe am Zend_Db_Table zurückgekehrt, aber wir würden immer noch wie seine Funktionalität zu halten, nur um es 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 fügen Sie dann nur protected $_rowClass = 'Model_User'; zum Model_Users Klasse und wir sind fertig ... normalerweise, dass würde der Fall sein, aber es scheint hier ein Problem in der Art und Weise Zend Framework automatisch lädt die Klassen. Da können wir die Ordnerstruktur /defaut/models/foo.php haben und die Klasse innerhalb dieser Model_Foo nennen. Der Ordner hat eine Vielzahl von Namen, aber die Klasse hat eine singuläre ein. Dies scheint ein Problem zu werden, wenn ich die oben angegebene Struktur haben will. Seit Zend Framework scheint nicht zwischen den UserModel.php und UsersModel.php zu differenzieren zu können.

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

Gibt es eine Möglichkeit, dies zu umgehen, ohne manuell Nutzung beginnen beinhaltet?

War es hilfreich?

Lösung

Eigentlich ist es empfehlenswert, Ihre Tabellenklassen in DB-Ordnern innerhalb von Modellen zu setzen, so dass es Modelle / dbtable / users.php und Klassennamen Model_DbTable_Users für Tisch sein würde und Modelle / user.php und Model_User für konkrete Benutzer. Aber wenn Sie sich entscheiden zu überspringen, dass ich sehe nicht das Problem, Modell / user.php mit Model_User und Modellen / users.php mit Model_Users als Tabelle.

Andere Tipps

Lassen Sie mich sagen, ich habe nie verwendet, um die /model Verzeichnis Auto-Ladeverzeichnisstruktur beginnen. Ich persönlich bevorzuge meine Modelle in einer „Bibliothek“ setzen, dass ich für diese Anwendung erstellen. Hier ist ein Auszug aus meinem application.ini

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

Sie Nutzer wäre SNTrack_Model_User und /library/SNTrack/Model/User.php entfernt. Ich würde rufen Sie die Tabelle SNTrack_Model_UserTable.

Sieht aus wie ein Standard-Autoloader Sache.

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

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

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

Alles sollte in Ordnung sein. #FamousLastWords; -)

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