Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-07-2009 14:40:53

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

[Résolu] Débuter avec les modules & les routes

Bonjour,

Je galère un peu avec les routes...

Voici mon arborescence

application
   modules
      default
          controllers
               IndexController.php
          views
               scripts
                    index
                         index.phtml
       admin
          controllers
               IndexController.php
          views
               scripts
                    index
                         index.phtml
         bootstrap.php // Admin_Bootstrap
bootstrap.php

Dans mon application.ini j'ai :

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultModule = "default"
resources.frontController.defaultAction = "index"
resources.frontController.defaultController = "index"

Dans mon bootstrap, j'ai tenté un :

protected function _initRoutes()
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();
        $router->addRoute('admin', new Zend_Controller_Router_Route_Static('admin', array(
            'module' => 'admin',
            'controller' => 'index',
            'action' =>'index'))
        );

        return $router;
    }

J'ai également tenté de modifier le fichier application.ini

resources.router.routes.admin.defaults.modules = "admin"
resources.router.routes.admin.defaults.controller = "index"
resources.router.routes.admin.defaults.action = "index"

Ma route par défaut semble fonctionner correctement mais pas la partie admin.


aka miboo

Hors ligne

 

#2 27-07-2009 15:21:40

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Salut,

Normalement si tu fais bien un bootstrap de ta ressource "router" ou un bootstrap() (=toutes les ressources), la syntaxe suivante dans application.ini devrait suffire:

Code:

resources.router.routes.admin.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.admin.route = "admin"
resources.router.routes.admin.defaults.module = "admin"
resources.router.routes.admin.defaults.controller = "index"
resources.router.routes.admin.defaults.action = "index"

Pas besoin de redéfinir _initRoutes() dans le bootstrap, c'est Zend_Application_Resource_Router qui sera utilisé.

Attention dans le code que tu as collé il y a un "s" à module:

Code:

resources.router.routes.admin.defaults.modules = "admin"

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 27-07-2009 15:32:56

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Merci pour ta réponse. J'ai apporté la correction au fichier application.ini et j'ai nettoyé le bootstrap.

Lorsque je fais http://dev.localhost/admin

J'obtiens :

An error occurred
Page not found
Exception information:

Message: Invalid controller class ("Admin_IndexController")

(...)

Request Parameters:

array(3) {
  ["module"]=>
  string(5) "admin"
  ["controller"]=>
  string(5) "index"
  ["action"]=>
  string(5) "index"

Les paramètres ont l'air bon pourtant


aka miboo

Hors ligne

 

#4 27-07-2009 15:36:33

ashgenesis
Membre
Date d'inscription: 26-11-2007
Messages: 12

Re: [Résolu] Débuter avec les modules & les routes

Bonjour,

Vérifie le nommage de tes fichiers quelques fois on zappe une majuscule.

Cordialement

Hors ligne

 

#5 27-07-2009 15:37:59

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Pourquoi est-ce que tu utilises une route ?

Si tu déclares bien tes modules tu ne devrais pas avoir besoin de faire ça.

Code:

;====== Resource frontController
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
;resources.frontController.defaultModule =

;====== Resource modules
resources.modules[] = ""

Avec une url du type http://dev.localhost/admin/ il devrait se démmerder tout seul.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#6 27-07-2009 15:41:56

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

C'est ce que j'espérais au départ, mais j'ai exactement le même problème. Du coup je me suis dis que j'avais peut être besoin d'une route spécifique mais apparemment non...

ashgenesis > C'est vrai qu'on est jamais à l'abri d'une petite erreur, surtout moi. J'ai revérifié et je ne vois pas d'erreurs dans mes noms.


aka miboo

Hors ligne

 

#7 27-07-2009 15:44:46

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Avec le code que je t'ai donné dans application.ini ça devrait fonctionner.

Es-tu certains de tes chemins ? Les bootstrap dans tes dossiers de modules sont-ils correctes ?

Ex. pour admin tu dois avoir un bootstrap.php (à la racine du dossier du module) contenant au minimum:

Code:

<?php
/**
 * Module admin - Bootstrap 
 */
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{   
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Admin_',
            'basePath'  => dirname(__FILE__)
        ));
        
        return $autoloader;
    }
}

A+

Dernière modification par Delprog (27-07-2009 15:45:16)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#8 27-07-2009 15:48:13

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Je vois que tu as fais ça dans une classe à part.

Cela ne suffit pas :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Admin_',
            'basePath'    => APPLICATION_PATH
        ));
           
        return $autoloader;
    }
   
    protected function _initView()
        (...)


aka miboo

Hors ligne

 

#9 27-07-2009 15:52:45

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Dans mes bootstrap je n'ai que l'initialisation de mes autoloader.

Dans le bootstrap de l'application j'ai l'initialisation pour le namespace par défaut. Ensuite dans chaque dossier de modules j'ai un bootstrap pour le module avec le namespace du module en question.

Ex :

Application:

Code:

<?php
/**
 * Bootstrap de l'application
 * 
 * @author Benjamin Dulau
 */
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'App_',
            'basePath'  => dirname(__FILE__),
        ));
        
        return $autoloader;
    }
}

Module Admin:

Code:

<?php
/**
 * Module admin - Bootstrap 
 */
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{   
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Admin_',
            'basePath'  => dirname(__FILE__)
        ));
        
        return $autoloader;
    }
}

En soulignant bien que pour le module admin le nom de la classe bootstrap et "Admin_Bootstrap".

Je crois que la doc précise qu'il faut un fichier de bootstrap pour chaque module.


A+


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#10 27-07-2009 15:52:55

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

le Stack trace:

Zend_Controller_Dispatcher_Standard->loadClass('IndexController')
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
Zend_Controller_Front->dispatch()
Zend_Application_Bootstrap_Bootstrap->run()
Zend_Application->run()


aka miboo

Hors ligne

 

#11 27-07-2009 15:58:26

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Delprog a écrit:

Dans mes bootstrap je n'ai que l'initialisation de mes autoloader.
(...)
Je crois que la doc précise qu'il faut un fichier de bootstrap pour chaque module.


A+

Je n'avais pas lu ça, pardonnez moi.

J'ai donc créé mon second bootstrap. Question : comment lier tous ces bootstraps entre eux, il va bien falloir qu'à un moment donné j'instancie l'Admin_Bootstrap?


aka miboo

Hors ligne

 

#12 27-07-2009 16:00:49

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Non c'est automatique.

Tu indiques l'emplacement de tes modules dans application.ini et Zend_Application se démerde. Il s'attend à trouver un fichier de bootstrap dans chaque module.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#13 27-07-2009 16:03:55

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Tiens je viens de me rendre compte que si je vire le bootstrap d'un de mes modules il fonctionne toujours....

Je fouille, j'ai du faire autre chose smile


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#14 27-07-2009 16:06:51

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

big_smile

Avec le bootstrap ça ne change rien chez moi.

Mon application.ini ressemble à ça :

;====== Resource frontController
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.defaultModule = "default"

;====== Resource modules
resources.modules[] = ""

Si je change le defaultModule j'arrive directement sur ma partie admin. Le module default devient à son tour injoinable.


aka miboo

Hors ligne

 

#15 27-07-2009 16:09:49

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Et bien c'est encore mieux smile

Avec ces paramètres là:

Code:

;====== Bootstrap
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

;====== Resource frontController
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/../modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
;resources.frontController.defaultModule =

;====== Resource modules
resources.modules[] = ""

Il retrouve tout seul ses petits.

Le bootstrap de l'application peut rester vide :

Code:

<?php
/**
 * Bootstrap de l'application
 * 
 * @author Benjamin Dulau
 */
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Et le fichier Bootstrap.php des modules n'est pas obligatoire, au temps pour moi. Tout fonctionne à l'identique sans tout ça.

Tu m'as permis de fouiller et de me rendre compte de code inutile smile


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#16 27-07-2009 16:15:13

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Oui en fait on est pas dans le même cas.

Ton module par défaut et tes modules sont tous situés dans un sous-dossier modules du dossier application.

Chez moi le module par défaut est dans application et les autres dans un dossier modules en dehors de application.

Du coup, la ligne

Code:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

n'est pas bonne.

Je réfléchis.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#17 27-07-2009 16:16:32

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Delprog a écrit:

Et bien c'est encore mieux smile

Avec ces paramètres là:
(...)
Tu m'as permis de fouiller et de me rendre compte de code inutile smile


A+ benjamin.

De rien, si je peux t'aider... big_smile

Rmq: effectivement j'ai toujours mon "Message: Invalid controller class ("Admin_IndexController")" sauf sur le module configuré par défaut (que ce soit l'admin ou le default)
Tous mes modules, même celui par défaut, est dans mon répertoire module smile


aka miboo

Hors ligne

 

#18 27-07-2009 16:20:44

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Tu as essayé de changer cette ligne ?

Code:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

Qui, dans ton cas, n'est pas bonne.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#19 27-07-2009 16:27:26

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Changer pour quelle valeur ?

Aucun changement pour le moment


aka miboo

Hors ligne

 

#20 27-07-2009 16:32:30

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Je peux voir un bout de ta classe Admin_IndexController ?


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#21 27-07-2009 16:34:22

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

Mais il n'y a pas de classe Admin_IndexController big_smile

Je n'ai qu'une classe IndexController, voir architecture en première page.
J'ai bien l'impression que c'est un problème de chargement de classe nan?


aka miboo

Hors ligne

 

#22 27-07-2009 16:41:10

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Non si tu as deux modules, tu as deux namespaces. Dans ton cas "Default" et "Admin".
Tout tes controlleurs de chaque module doivent être préfixés du namespace.

Si tu as

Application/
    modules/
        default/
            controllers/
                IndexController.php

        admin/
            controllers/
                IndexController.php


L' IndexController de default doit être:

Code:

class Default_IndexController extends Zend_Controller_Action {}

celui du module admin:

Code:

class Admin_IndexController extends Zend_Controller_Action {}

Les fichiers eux s'appellent toujours IndexController.php où qu'ils soient.

Et normalement avec les paramètres dans le ini il s'en sort tout seul.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#23 27-07-2009 16:45:39

aurao
Nouveau membre
Date d'inscription: 27-07-2009
Messages: 9

Re: [Résolu] Débuter avec les modules & les routes

Je n'ai pas suivi tout le sujet, mais en lisant tes premiers messages et ton dernier, je pense que j'ai compris xD Dans le module par défaut, les classes de controlleurs doivent avoir pour nom LeNomController, mais dans les autres modules, elles doivent se nommer LeModule_LeNomController. Donc je pense que tu dois simplement rajouter Admin_ au début du nom de ton controlleur Index de ton module Admin. Perso c'est la première erreur que j'ai faîtes avec le ZF big_smile

EDIT: Delprog a été plus rapide, et plus clair je pense xD

Dernière modification par aurao (27-07-2009 16:47:16)

Hors ligne

 

#24 27-07-2009 16:48:33

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Débuter avec les modules & les routes

aurao a écrit:

Je n'ai pas suivi tout le sujet, mais en lisant tes premiers messages et ton dernier, je pense que j'ai compris xD Dans le module par défaut, les classes de controlleurs doivent avoir pour nom LeNomController, mais dans les autres modules, elles doivent se nommer LeModule_LeNomController. Donc je pense que tu dois simplement rajouter Admin_ au début du nom de ton controlleur Index de ton module Admin.

Effectivement je viens de m'en rendre compte en testant la dernière réponse de Delprog, le module default dispose d'une classe IndexController et le module admin Admin_IndexController.

Tout est rentré dans l'ordre maintenant, merci à vous tous smile

Perso c'est la première erreur que j'ai faîtes avec le ZF big_smile

Moi c'est la n°1654 big_smile


aka miboo

Hors ligne

 

#25 27-07-2009 16:49:55

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Débuter avec les modules & les routes

Rah je l'avais soupçonné au début cette erreur, mais je m'étais dit non cette erreur on ne la fait qu'une fois smile

J'aurais du commencer par là ! :p

Dernière modification par Delprog (27-07-2009 16:50:08)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

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