Se déplacer d'un « problème » avec les conventions de nommage utilisées par le Zend Framework autoloader
-
11-10-2019 - |
Question
Disons que j'ai une table contenant utilisateurs . Chaque ligne de cette table est donc un utilisateur . L'important est ici le pluriel vs singulier.
Maintenant, regardons l'on mis en place des modèles pour ces derniers dans Zend Framework:
class Model_Users extends Zend_Db_Table_Abstract
{
protected $_name = 'users';
protected $_primary = 'user_id';
}
Maintenant, nous allons plus loin présument que nous voulons une autre utilisateur objet autre que la ligne standard retournée par le Zend_Db_Table
, mais nous tout de même conserver sa fonctionnalité, juste l'étendre. Il serait logique de mettre en œuvre et nommer un seul utilisateur comme:
class Model_User extends Zend_Db_Table_Row_Abstract
{
... Bunch of cool functions here :)
}
Nous avons ensuite simplement ajouter
protected $_rowClass = 'Model_User';
à la classe Model_Users
et nous avons terminé ... Normalement, ce serait être le cas, mais il semble y avoir un problème dans l'auto-charges façon Zend Framework des classes. Étant donné que nous pouvons avoir la structure des dossiers /defaut/models/foo.php
et le nom de la classe dans ce Model_Foo
. Le dossier a un nom pluriel, mais la classe a un singulier. Cela semble devenir un problème quand je veux avoir la structure indiquée ci-dessus. Depuis Zend Framework ne semble pas être en mesure de faire la différence entre les UserModel.php
et UsersModel.php
.
La question à cette longue et poétique question quelque peu est:
Y at-il un moyen de contourner cela sans commencer à utiliser manuellement comprend?
La solution
En fait, il est recommandé de mettre vos classes de table dans db dossier dans les modèles, il serait des modèles / DbTable / users.php et Model_DbTable_Users nom de classe pour la table et les modèles / user.php et Model_User pour l'utilisateur du béton. Mais si vous décidez de sauter sur que je ne vois pas le problème d'avoir le modèle / user.php avec Model_User et modèles / users.php avec Model_Users comme table.
Autres conseils
Permettez-moi de commencer par dire que j'ai jamais utilisé le répertoire /model
structure de répertoire automatique de chargement. Personnellement, je préfère mettre mes modèles dans une « bibliothèque » que je crée pour cette application.
Voici un extrait de mon application.ini
includePaths.library = APPLICATION_PATH "/../library"
autoloadernamespaces[] = "SNTrack_"
Mon utilisateur serait SNTrack_Model_User
et situé à /library/SNTrack/Model/User.php
. Je qualifierais la table SNTrack_Model_UserTable
.
On dirait une chose standard autochargeur.
Assurez-vous de l'initialiser autochargeur, probablement Bootstrap.php
, en utilisant quelque chose comme:
protected function _initAutloader()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
));
}
Ensuite, dans application/models/User.php
vous définissez votre Model_User
de classe. Et application/models/Users.php
vous définissez votre Model_Users
de classe.
Tout devrait bien se passer. #FamousLastWords; -)