Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-06-2009 18:26:10

nilujee
Nouveau membre
Date d'inscription: 04-06-2009
Messages: 1

[Models] Autoload des modèles avec ZendFramework 1.8.x

Bonjour,

J'ai utilisé les Zend_Tools pour générer l'arborescence et les fichiers de base. Puis, pour que les Models, Forms, etc. soient directement instanciables, j'ai dû ajouter dans le application/Bootstrap.php ceci :

Code:

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

Maintenant, si j'ai un fichier ./application/models/Movies.php avec une class Model_Movies définie dedans, j'ai la possibilité dans le controleur de l'instancier directement. De là même façon, la class Form_Login extends Zend_Form contenue dans application/forms/Login.php est maintenant directement instanciable depuis n'importe quel controleur.

Jusque là aucun soucis. Le problème, c'est que la classe Model_Movies est en fait une class Model_Movies extends Zend_Db_Table_Abstract de façon à pouvoir faire ce genre de chose dans le controleur :

Code:

$model = new Model_Movies;
$data = $model->fetchAll();

Tout marche bien sauf si je veux faire des liens entre les tables. Apparemment le nom "Model_Movies" ne se prête pas à ce genre de manip. J'ai une table movies et une table categories. Je crée donc les deux modèles suivant :

Dans application/models/Categories.php :

Code:

class Model_Categories extends Zend_Db_Table_Abstract
{
    protected $_name = 'categories';
    protected $_primary = array('id');
}

Et dans application/models/Movies.php :

Code:

class Model_Movies extends Zend_Db_Table_Abstract
{
    protected $_name = 'movies';
    protected $_primary = array('id');
    protected $_referenceMap = Array
    (
        'Category' => Array
        (
            'columns' => Array('cat_id'),
            'refTableClass' => 'Model_Categories',
            'refColumns' => Array('id')
        )
    );
}

De cette façon je cherche à pouvoir obtenir le nom de la catégorie en fonction de l'id de la vidéo. Mais évidemment ça ne marche pas : au moment de "join" les tables, Zend ne parvient pas à instancier de class "Categories".

La question est donc : est-ce que le schéma d'autoload que j'utilise est la « bonne » manière de procéder ? Car dans tous les exemples de Zend Framework, le nom des Models de tables n'est pas préfixé par "Model". Quelle est donc la config attendue dans le public/index.php et/ou Bootstrap.php ?

Je trouve la doc très évasive sur ce sujet, pourtant, tous les exemples semblent baser sur un modèle de chargement/autoload standard... que je n'ai pas trouvé.

Merci.

Hors ligne

 

#2 28-06-2009 19:55:35

Diaoul
Membre
Date d'inscription: 28-06-2009
Messages: 13
Site web

Re: [Models] Autoload des modèles avec ZendFramework 1.8.x

Si quelqu'un à une idée de comment se débarrasser du préfixe Model_ devant les models, je suis aussi preneur.

Code:

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath'  => 'path/to/some/directory',
    'namespace' => 'My',
));
$resourceLoader->addResourceType('acl', 'acls/', 'Acl')
               ->addResourceType('form', 'forms/', 'Form')
               ->addResourceType('model', 'models/');

Source : http://framework.zend.com/manual/fr/zen … ource.html

C'est moi ou cet exemple n'est pas fonctionnel ?
Moi il me met une exception comme quoi il attend un namespace pour la "ressourceType" model.

Je suis un peu déçu de devoir de trimbaler mes "Model_News", "Model_Personne" hmm
C'est pas très pratique.

Merci

Hors ligne

 

#3 29-06-2009 08:21:49

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Models] Autoload des modèles avec ZendFramework 1.8.x

Je ne suis pas sur, mais si tu définis un type de resource par défaut, tu peux eventuellement omettre le model quand tu instancies tes models, mais pas dans leur déclaration

$this->setDefaultResourceType('model');


----
Gruiiik !

Hors ligne

 

#4 29-06-2009 09:12:49

Diaoul
Membre
Date d'inscription: 28-06-2009
Messages: 13
Site web

Re: [Models] Autoload des modèles avec ZendFramework 1.8.x

Chez moi ça ne marche pas en tout cas... hmm

Par contre, j'ai trouvé quelque chose qui permet de revenir à un comportement plus rustre de l'autoloader :

Code:

$autoloader->setFallbackAutoloader(true);

Par contre ça oblige à mettre le répertoire "models" dans l'include path.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages