Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-09-2007 11:58:57

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

[Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour,

Voilà, je me lance avec le MVC de Zend et j'ai une question à vous poser (après avoir lu plusieurs post, pas de réponse précise).

Question : j'ai une application comportant plusieurs modules qui partagent le même répertoire Model (pour mutualiser les classes métiers entre les différents modules).

L'arborescence serait du type :

<Racine-application>
    <applications>
            <default>
                 <controllers>
                 <models>
                 <views>
            <module1>
                 <controllers>
                 <views>
            <module2>
                <controllers>
                 <views>
            <module3>
                <controllers>
                 <views>

Pouvez-vous me dire que mettre en plus dans le bootstrap pour lui indiquer que
- j'ai plusieurs modules ?
- j'ai un unique Model pour tous ces controlleurs ?

Merci d'avance pour votre aide.

kaboume.

Hors ligne

 

#2 21-09-2007 13:27:18

Ysaak
Membre
Lieu: Strasbourg
Date d'inscription: 18-06-2007
Messages: 33

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour,

C'est assez simple à faire. dans ton bootstrap tu ajoutes à ton controller pour les modules :

Code:

$front->addModuleDirectory('/applications');

Et pour ton répertoire models unique, il suffit d'ajouter le dossier dans le set_include_path :

Code:

set_include_path( 
    'applications/default/models/' 
    . PATH_SEPARATOR
    . get_include_path()
);

A+,
Damien

Dernière modification par Ysaak (21-09-2007 13:27:52)

Hors ligne

 

#3 21-09-2007 15:00:20

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour ysaak,

Merci pour ta réponse.

J'ai finalement pris l'arborescence suivante :

<Racine-application>
    <models>
    <applications>
            <module1>
                 <controllers>
                 <views>
            <module2>
                <controllers>
                 <views>
            <module3>
                <controllers>
                 <views>

J'ai bien intégrer tes modifs dans mon bootstrap :

Code:

<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/Paris');

set_include_path('.' . PATH_SEPARATOR . './library'
.PATH_SEPARATOR . './models/'
.PATH_SEPARATOR . get_include_path());
     
include "./library/Zend/Loader.php";  

Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Controller_Request_Http');

// setup controller   
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./applications');

// run!
$frontController->dispatch();
?>

Mais lorsque je visualise dans IE à l'adresse http://localhost/module1/index/, j'ai l'erreur suivante :


Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (module1) C:\wamp\www\library\Zend\Controller\Dispatcher\Standard.php:193 Stack trace: #0 C:\wamp\www\library\Zend\Controller\Front.php(911): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\index.php(21): Zend_Controller_Front->dispatch() #2 {main} thrown in C:\wamp\www\\library\Zend\Controller\Dispatcher\Standard.php on line 193


Aurai-je oublié de préciser quelque chose ?

Dernière modification par kaboume (21-09-2007 15:01:05)

Hors ligne

 

#4 21-09-2007 15:42:46

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour kaboume,

Il faut faire un

Code:

$front->addModuleDirectory('/applications');

et pas un setControllerDirectory.
cf message d'Ysaak.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 21-09-2007 16:02:19

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

J'ai pas fait gaffe!

En effet, ça marche!

Merci à tous les 2!!!!!!!!!!!!

Hors ligne

 

#6 21-09-2007 16:05:46

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Un plugin risque de faire son apparition un jour, il s'appelle modelLoader, et servira notamment à autoloader les modèles dans les controleurs,  ou à partager "proprement" ses modèles entre controleurs de différents modules.

Pour le moment, cette technique est tout à fait juste et valable smile

Hors ligne

 

#7 02-10-2007 08:51:55

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Rebonjour,

Je reviens sur ce post pour savoir comment récupérer le nom du module dans lequel je me trouve.

En effet, j'ai couplé mon MVC avec Smarty et j'ai besoin de pointer vers le bon répertoire de tempate (qui correspond au module) pour sélectionner ma vue.

Merci d'avance.
kaboume

Hors ligne

 

#8 02-10-2007 14:14:10

Ysaak
Membre
Lieu: Strasbourg
Date d'inscription: 18-06-2007
Messages: 33

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Salut kaboume,

Pour récupérer le nom du module dans lequel tu te trouve, il faut utiliser la méthode : getModuleName() de l'objet Request.

Il existe la même chose pour le controller et l'action.

@+

Hors ligne

 

#9 02-10-2007 14:28:39

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Salut Ysaak,

Merci bcp!
Ca marche!

A+

Hors ligne

 

#10 12-11-2007 23:04:14

dug
Membre
Date d'inscription: 15-10-2007
Messages: 23

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour,

Je n'arrive pas à faire fonctionner mon arborescence avec mes modules.

J'utilise l'arboresence suivante :

/application
    /models
    /modules
        /admin
            /controllers
            /views
        /default
            /controllers
            /views
/library
/public

Dans mon bootstrap :

Code:

<?php
    
    error_reporting(E_ALL|E_STRICT);
    date_default_timezone_set('Europe/Paris');
    
    set_include_path(
        '.'.PATH_SEPARATOR.
        './application/models'.PATH_SEPARATOR.
        './library'.PATH_SEPARATOR.
        get_include_path()
    );
    
    require_once 'Zend/Loader.php';
    
    Zend_Loader::loadClass('Zend_Controller_Front');
    
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->addModuleDirectory('./application/modules');
    $frontController->throwExceptions(true);

Lorsque que je vais sur mon http://localhost/, tout va bien. Il me sort bien le controller IndexController du module default mais lorsque je vais sur http://localhost/admin :

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Admin_IndexController")'

Quelqu'un a t'il une idée ?

Merci

Hors ligne

 

#11 13-11-2007 07:47:16

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Hello,

Peux-tu donner le code de ton controleur Index de ton module Admin ?

Hors ligne

 

#12 13-11-2007 08:43:48

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Ce message d'erreur signifie que le dispatcher a bien trouver le fichier du controller mais que la classe qu'il est censé contenir n'a pas été définie. En gros, assure toi que tu n'as pas fait d'erreur dans le nom de la classe et dans la casse.

Ta classe devrait se nommer Admin_IndexController. Attention aux majuscules.

Hors ligne

 

#13 13-11-2007 13:59:18

dug
Membre
Date d'inscription: 15-10-2007
Messages: 23

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Ahhhh !

Merci messieurs ! En effet, il suffisait de renommer ma classe Admin_IndexController...

Bonne journée.

Hors ligne

 

#14 17-11-2007 23:34:21

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Bonjour,

J'ai suivi exactement l'arborescence et le bootstrap de dug et j'ai le message d'erreur suivant à l'url http://localhost/admin :

Code:

Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (index)' in

Je pense que je dois avoir un problème au niveau de mon Admin_IndexController ou de l'organisation de mes fichiers.

Voici le code de mon Admin_IndexController :

Code:

class Admin_IndexController extends Zend_Controller_Action 
{
    function init(){
        $this->initView();
        $this->view->baseUrl = $this->_request->getBaseUrl();
    }
    
    public function __call($method, $args) {
        $this->_forward('index');
    }

    function indexAction() {
        $this->render();
    }
}

Au niveau de la vue, j'ai bien un répertoire index avec un le fichier index.phtml dans view de admin.

Spécialement, je ne vois pas ce que j'ai loupé. Si quelqu'un avait une piste...

Hors ligne

 

#15 18-11-2007 10:26:04

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Hello,

Ta classe soit s'appeler en effet Admin_IndexController mais le fichier contenant ta classe doit s'appeler IndexController.

Donnc tu dois avoir ton controller dans :
/application
    /models
    /modules
        /admin
            /controllers
                /default
                    IndexController.php

Dis moi si ca marche.

A+

Hors ligne

 

#16 18-11-2007 10:56:33

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Oui c'est une des bizarrerie dans le nommage de des Classes dans ZF
A+JYT

Hors ligne

 

#17 18-11-2007 11:31:34

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Effectivement, cela venait d'un problème de nommage de mon fichier de la classe Admin_IndexController. J'avais essayé différents nommages sauf celui-ci. Il faut bien préfixer le nom de la classe avec le nom du module mais pas le nom du fichier de la classe. Merci pour votre aide.

Maintenant je voudrais spécifier un module par défaut dans mon bootstrap. Voici mon nouveau bootstrap :

Code:

    error_reporting(E_ALL|E_STRICT);
    date_default_timezone_set('Europe/Paris');
    
    set_include_path(
        '.'.PATH_SEPARATOR.
        './application/models'.PATH_SEPARATOR.
        './library'.PATH_SEPARATOR.
        get_include_path()
    );
    
    require_once 'Zend/Loader.php';
    
    Zend_Loader::loadClass('Zend_Controller_Front');
    Zend_Loader::loadClass('Zend_Controller_Router_Route');
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->addModuleDirectory('./application/modules');
    
    // spécifier le module par défaut
    $frontController->setDefaultModule('default');
    $frontController->setDefaultControllerName('index');
    $frontController->setDefaultAction('index');

    $frontController->throwExceptions(true);
    $frontController->dispatch();

Mais quand je vais à l'URL  http://localhost/toto, je ne suis pas redirigé vers le module defaut, controler index, action index. J'ai ce message d'erreur :

Code:

Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (toto)' in

J'ai dû oublier quelque chose dans mon bootstrap ou dans ma fonction _call de mon Admin_IndexController ($this->_forward('index'). Pour être plus clair, je voudrais que dans le cas de mauvaise url (mauvais module, mauvais controller, mauvaise action), l'utilisateur soit redirigé par défaut vers une action d'un controller d'un module (suis-je clair).

Hors ligne

 

#18 18-11-2007 11:46:51

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

Hello,

Je pense que setDefaultModule() défini le module par défaut appelé lmorsque tu lance http://localhost.

Toit, ce que tu veux, c'est définir un module dans le cas d'une erreur de module (ex : module n'existe pas dans ton cas).

Je ne sais pas s'il existe une méthode spécifique pour définir ce module "d'erreur" ou s'il faut que dans ton code, tu catch l'exception et que tu redirige vers le module souhaité.

Si tu trouves, je suis preneur.

A+

Hors ligne

 

#19 18-11-2007 23:34:46

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

Re: [Zend_Controller_Front][1.0] plusieurs modules avec 1 répertoire Model

En faisant un catch sur Zend_Controller_Dispatcher_Exception, on peut effectivement effectuer une redirection vers le module/controller/action par defaut ou une URL.

Par contre, j'aimerais bien récupérer le module, le controller et l'action dans le lequel où on se trouve. Il a été dit plus bas qu'il existait les méthodes : getModuleName(), getControllerName() et getActionName() de l'objet Request. Mais je n'arrive pas à le mettre en place dans mon bootstrap. Un peu d'aide serait le bien venu...

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