Se déplacer d'un « problème » avec les conventions de nommage utilisées par le Zend Framework autoloader

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

  •  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?

Était-ce utile?

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; -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top