Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-08-2011 11:42:48

croftma
Membre
Date d'inscription: 26-07-2011
Messages: 11
Site web

[Résolu] zend et les modules

Bonjour!

Je tente d'utiliser l'architecture par modules avec Zend et jusque la ça allait, mais je rencontre un problème, alors tout d'abord j'aimerais savoir si ce que j'ai fais est bon !

Voici mon arborescence :

http://img153.imageshack.us/img153/615/arbov.jpg

J'ai donc deux modules, default et admin, je peux accéder correctement aux deux modules.

Mon Bootstrap principal :

Code:

[lang=php]<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    protected function _initAutoLoader() {
        $autoloader = Zend_Loader_Autoloader::getInstance();
        
    }
 
}

Mon application.ini :

Code:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.modules[] = ""
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Et mon IndexController qui pose problème :

Code:

[lang=php]class IndexController extends Zend_Controller_Action
{

    public function init() {
        parent::init();
        $models = $this->_request->getParam('module').'/models';
        set_include_path('../application/modules/'.$models . PATH_SEPARATOR . get_include_path());
    }

    public function indexAction() {
        //require('../application/modules/default/models/users.php');
        $users = new Application_Model_DbTable_Users(); // Ici il ne trouve pas la classe
        //$this->view->users = $users->listeUsers();
    }


}

Le problème viens quand je veux instancier ma classe Application_Model_DbTable_Users, il ne la trouve pas, donc je me suis dis que c'est parce-qu'il ne trouvais pas le fichier, j'ai donc mis un require comme vous pouvez le voir en commentaire et la ça marche.

Mais pourtant dans l'init du controller le set_include_path devrait fonctionner non ? Si j'affiche get_include_path le chemin est bon !

Des idées ?

Merci d'avance !

Edit :

Je précise aussi que lorsque je met le require, ma classe est bien trouvé mais je me retrouve avec l'erreur :

Zend a écrit:

Message: No adapter found for Application_Model_DbTable_Users

Donc doit me manquer quelque-chose à paramétrer hmm

Dernière modification par croftma (17-08-2011 13:16:12)

Hors ligne

 

#2 17-08-2011 11:50:03

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] zend et les modules

Bonjour,

Pour chaque module, il faut créer un bootstrap de module. Ce sujet a déjà été traité sur ce site, et la réponse en mode développée en anglais se trouve sur le site de Rob Allen : Bootstrapping modules in ZF 1.8 and up.

Il faut donc que tu crées un fichier bootstrap.php dans chaque module, et que tu y mettes juste la déclaration de la classe de bootstrap de module.

Hors ligne

 

#3 17-08-2011 11:55:55

croftma
Membre
Date d'inscription: 26-07-2011
Messages: 11
Site web

Re: [Résolu] zend et les modules

C'est bien ce que j'ai fais, si tu regarde mon arborescence on peut voir le fichier bootstrap dans le dossier default smile

Je vais regarder ton lien

Hors ligne

 

#4 17-08-2011 12:02:41

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] zend et les modules

En fait je ne vois pas ton arborescence... Surement un coup de Websense, je suis au boulot et ici on a pas un accès complet au net, tout est filtré...

Application_Model_DbTable_Users doit se trouver dans /application/Models/DbTable/Users.php, si tu veux utiliser un model spécifique à ton module, remplace Application par le nom du module.

Si tu peux, essaye de faire un petit schéma de ton archi pour que je puisse le voir ici genre :
application
  - models
      - DbTable

Mets que ce qui est importants (models, modules et bootstraps)

Hors ligne

 

#5 17-08-2011 12:13:45

croftma
Membre
Date d'inscription: 26-07-2011
Messages: 11
Site web

Re: [Résolu] zend et les modules

Ok donc voici mon archi :

Application
   -- configs
   -- layouts
   -- modules
      -- admin
      -- default
         -- controllers
         -- models
            -- DbTable
               -- users.php
         -- views
         -- bootstrap.php
      -- bootstrap.php
   -- library
   -- public


Mes fichiers mis à jour :

IndexController du module Default :

Code:

[lang=php]
<?php

class IndexController extends Zend_Controller_Action
{

    public function init() {

    }

    public function indexAction() {
        //require('../application/modules/default/models/users.php');
        $users = new Application_Model_DbTable_Users();
        $this->view->users = $users->listeUsers();
    }


}

Le fichier users.php

Code:

[lang=php]
<?php

class Application_Model_DbTable_Users  extends Zend_Db_Table_Abstract {
   
     ...
}

Le bootstrap du module default :

Code:

[lang=php]
<?php

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

Hors ligne

 

#6 17-08-2011 12:17:22

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] zend et les modules

En effet, le code de users.php est bon dans le cas où tu mets le fichier dans Application/models/DbTable/.

Si tu veux le charger dans ton module, il faut que tu l'appelles Default_Model_DbTable_Users

Hors ligne

 

#7 17-08-2011 12:19:46

croftma
Membre
Date d'inscription: 26-07-2011
Messages: 11
Site web

Re: [Résolu] zend et les modules

Ahhh ok impec je vois smile

Il me trouve bien la classe !

Mais maintenant il me donne :

Zend a écrit:

Message: No adapter found for Default_Model_DbTable_Users

Hors ligne

 

#8 17-08-2011 12:26:37

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] zend et les modules

Oui en effet il semblerait que tu n’aies pas défini d'adaptateur de vase de données...

Si tu utilises Zend_Tool, tu peux mettre la commande suivante avec tes paramètres :

Code:

zf configure db-adapter "adapter=PDO_PGSQL&host=localhost&dbname=mydb&username=admin&password=pass"

Hors ligne

 

#9 17-08-2011 12:46:08

Alcide_
Membre
Lieu: Brest
Date d'inscription: 20-03-2010
Messages: 31
Site web

Re: [Résolu] zend et les modules

Là, ça veux dire que tu n'as pas configurer ton adaptateur de base de données dans ton bootstrap...
As-tu une ligne qui ressemble à ça dans ton bootstrap ?

Code:

[lang=php]
/* ... */
$db = Zend_Db::factory(/*tes options*/);
Zend_Db_Table::setDefaultAdapter($db);
/* ... */

Sinon, vu que tes 2 bootstraps sont vide, un seul serait largement suffisant...
Il te suffirait juste :
- soit de réunir tes modèles dans un seul répertoire et d'ajouter ce répertoire à l'autoloader
- soit d'ajouter tes 2 répertoires de modèles à l'autoloader
- soit d'ajouter le répertoire du module courant en testant la requête en cours.
Un truc dans cette idée :

Code:

[lang=php]
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
/* ... */
    protected function _initAutoloader() {
        $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
                    'basePath' => '/path/to/models/',
                    'namespace' => '',
                    'resourceTypes' => array(
                        'tables' => array(
                            'path' => 'DbTables/',
                            'namespace' => 'DbTable_')
                        )));
    }
/* ... */
}

Et surtout, pas de "require" au milieu de ton code, sinon ça va devenir le gros bordel et vas-y pour passer au namespace après !

Hors ligne

 

#10 17-08-2011 13:15:44

croftma
Membre
Date d'inscription: 26-07-2011
Messages: 11
Site web

Re: [Résolu] zend et les modules

Humpf mais quel boulet, je pensais avoir copier coller mon application.ini en fait non x)

resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = user
resources.db.params.password = mdp
resources.db.params.dbname = bdd

Avec ça en plus ça marche mieux!

Et non non le require c'était juste pour les tests wink

Merci à vous !!!

Dernière modification par croftma (17-08-2011 13:21:49)

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