Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-07-2007 08:54:13

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

[Résolu][Controller][1.0]MVC et architecture

Bonjour,
je m'interroge sur la pertinence d'utiliser un système modulaire : si dans certains cas ça peut se révéler parfaitement adapté, j'ai des doutes dans d'autres cas.

En parcourant les sujets, j'ai par exemple vu une architecture comme ceci :

Code:

application/
    blog/
        controllers/
            IndexController.php
        models/
        views/
    default/
        controllers/
            IndexController.php
            ArticleController.php
        models/
        views/

Ce que je voudrais faire est un peu différent et mon but premier est d'éviter d'avoir des contrôleurs à rallonge. Me basant sur deux tutos de Rob Allen, j'ai donc une architecture sans modules :

Code:

application/
    default/
        controllers/
            IndexController.php
            AuthController.php
        models/
        views/

Pour réduire la taille du fichier chargé, en particulier l'index (même si je l'ai fait pour l'autre), j'ai ajouté un sous-répertoire avec un fichier pour chaque action contenant sont code, ce qui donne sommairement :

Code:

application/
    default/
        controllers/
            Index/
                index.php
                ajouter.php
                modifier.php
                supprimer.php
            Auth/
                index.php
                login.php
                logout.php
            IndexController.php
            AuthController.php
        models/
        views/

Ce que je chercher, c'est une manière propre de faire ça, mais j'ai un peu de mal à trouver (si tant est que ça existe) la méthode pour indiquer où aller chercher le "sous-contrôleur" plutôt que de faire des includes ? :?

Dernière modification par Cyrano (15-07-2007 09:01:44)


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#2 04-07-2007 09:09:51

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

Re: [Résolu][Controller][1.0]MVC et architecture

Pour faire ça, tu peux sous-classer Zend_Controller_Action et réécrire la fonction dispatch. Ensuite tu peux faire hériter tes controlleurs de ta classe My_Controlleur_Action au lieu de Zend_Controller_Action.

A+, Philippe


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

Hors ligne

 

#3 04-07-2007 09:35:44

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

Re: [Résolu][Controller][1.0]MVC et architecture

Si ton controleur a trop d'action, et sans pour autant faire des modules, tu devrais voir si y a pas des themes qui se decoupe dans tes actions et faire plusieurs controlleurs au lieu d'un gros.

Les modules sont pour moi un découpage de plus haut niveau, une section d'un site par exemple.


D'autres pistes a tester :
- Ajout d'une partie statique a ta route mais ca reviens un peu a faire des modules, moi j'ai fais ca car le découpage module/controller/action n'est pas suffisant pour moi.

- utilisation de /param/value pour faire un proxy routage au sein de l'action genre /subaction/subactionname

- Solution du meme acabit que les actionHelpers.

Hors ligne

 

#4 04-07-2007 09:59:14

fred wolf
Administrateur
Lieu: Bordeaux
Date d'inscription: 09-04-2007
Messages: 96

Re: [Résolu][Controller][1.0]MVC et architecture

Cyrano,

il me semble qu'il existe un proposal visant à utiliser des fichiers pour stocker les actions comme tu l'as décrit dans ton exemple.
Si mes souvenirs sont bons tu trouveras une réponse à ton problème.
Le W(ea)ky de ZF étant encore en vrac, je n'ai pu retrouver le lien.

Fred

Hors ligne

 

#5 04-07-2007 12:12:41

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

philippe a écrit:

Pour faire ça, tu peux sous-classer Zend_Controller_Action et réécrire la fonction dispatch. Ensuite tu peux faire hériter tes controlleurs de ta classe My_Controlleur_Action au lieu de Zend_Controller_Action.

A+, Philippe

Je n'avais pas vu ta réponse, merci infiniment, je vais regarder ça smile

fred wolf a écrit:

Cyrano,

il me semble qu'il existe un proposal visant à utiliser des fichiers pour stocker les actions comme tu l'as décrit dans ton exemple.
Si mes souvenirs sont bons tu trouveras une réponse à ton problème.
Le W(ea)ky de ZF étant encore en vrac, je n'ai pu retrouver le lien.

Fred

Je vais fouiller dans la soirée, dans l'immédiat, je suis au bureau et j'ai trop de travail.. :?

Je te remercie beaucoup smile

Dernière modification par Cyrano (04-07-2007 12:13:50)


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#6 07-07-2007 11:29:39

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Bonjour,
j'ai beau fouiller, j'ai du louper un chapitre quelque part.

Voici ce que j'ai compris jusqu'à présent : je peux utiliser la méthode _forward() dans le pre-dispatch pour pointer vers un "sous-contrôleur" que j'aurais défini pour une action définie. Le problème, c'est que je ne saisis pas ce que je dois exactement indiquer en paramètre. La méthode attend en premier paramètre le répertoire où trouver ledit sous-contrôleur, le second paramètre indique le contrôleur lui-même. C'est ce second paramètre qui coince. Est-ce qu'il y a une convention de nommage pour les fichiers ? Est-ce que ce second paramètre doit être un nom de fichier (incluant l'extension) ou un nom de classe ? Si ce fichier est lui même une classe étendant mon contrôleur frontal, dois-je nommer différemment la méthode indexAction() et dans ce cas en suivant quelle règle ?

J'ai bien trouvé ceci dans le wiki ZF, mais c'est succinct et pas plus clair.

Merci d'avance pour vos lumières smile

Dernière modification par Cyrano (07-07-2007 11:30:35)


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#7 07-07-2007 23:22:24

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

Re: [Résolu][Controller][1.0]MVC et architecture

Le controller doit etre un nom de controller, tel que dans la conception, pas de classe ou de fichier.
Au meme titre, tu peux spécifier un module, et pour moi, le premier parametre est l'action pas le repertoire.
Enfin, le dernier parametre represente les parametres que tu souhaites passer dans le request object.

Hors ligne

 

#8 08-07-2007 00:15:24

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

TiTerm a écrit:

Le controller doit etre un nom de controller, tel que dans la conception, pas de classe ou de fichier....

Je n'ai pas de module et c'est précisément ce que je veux : pas de modules hormis le répertoire par défaut de l'application. Enfin pour l'instant s'entend. Si je dois monter ultérieurement une application plus complexe qui nécessite une subdivision plus importante, je songerai alors aux modules.

L'objectif est simple : un sous-contrôleur correspondant à chaque action de mon indexController parce que je veux éviter un IndexController avec des kilomètres de code. Chaque sous-contrôleur sera donc une extension d'IndexController. Tout ce qui m'intéresse donc pour l'instant, c'est de comprendre comment l'indiquer soit dans ma méthode init() soit dans le preDispatch() et avec quelle convention de nommage (s'il doit y en avoir une)


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#9 08-07-2007 16:03:25

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

Re: [Résolu][Controller][1.0]MVC et architecture

C'est bien a ca que je répondais. Admettons que tu ais un controller cont2  Nom de fichier cont2Controller.php donc, sur lequel tu souhaites forwarder, et bien tu utilises la string 'cont2' pour le parametre controller. Au meme titre que pour l'action, tu utlises le nom conceptuel de l'action (ex: edit) et nom pas le nom réel (editAction).

Hors ligne

 

#10 08-07-2007 17:35:18

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Je vais reposer le problème avec ses données. Voici d'abord mon architecture actuelle : je suis parti à la base du tuto mentionné au début de ce sujet , tuto qui consiste à construire une application de gestion de CDs.

Code:

/zf-tutorial
    /application
        /controleurs
            /auth
                /IdentificationController.php
                /loginController.php
                /logoutController.php
            /index
                /AccueilController.php
                /AjouterController.php
                /ModifierController.php
                /SupprimerController.php
            /AuthController.php
            /IndexController.php
        /modeles
            /Cd.php
        /views
            /filters
            /helpers
            /scripts
                /auth
                    /login.phtml
                /index
                    /_form.phtml
                    /ajouter.phtml
                    /index.phtml
                    /modifier.phtml
                    /supprimer.phtml
                /footer.phtml
                /header.phtml
                /retour.phtml
            /.htaccess
        /.htaccess
    /config
        /config.ini
    /librairie
        /Zend
        /.htaccess
    /public
        /images
        /scripts
        /styles
        /.htaccess
    /.htaccess
    /index.php

Dans ma page index (racine), j'ai mis ceci :

Code:

$frontController->setControllerDirectory(array(
        "default" => $appDir .'application'. $ds .'controleurs',
        "index"   => $appDir .'application'. $ds .' index '. $ds .'controleurs',
        "auth"    => $appDir .'application'. $ds .' auth '. $ds .'controleurs'
    )
);

Ce que j'ai mis dans la méthode init() de mon IndexController comprend entre autres choses ceci :

Code:

//...
        /* On fait suivre vers le contrôleur indépendant approprié */
        $Action = isset($this->_request->_param['action']) ? $this->_request->_param['action'] : "accueil";
        $Action = ($Action == 'index') ? 'accueil' : $Action;
        $Ctrl   = $this->repActions . $Action .'Controller';
        $this->_forward($Action, $Ctrl);
//....

Et du coup, je n'ai plus les méthodes d'action dans le controller directement puisque les méthodes en questions sont factorisées et externalisées individuellement dans des sous-contrôleurs indépendants.

Ça ne semble pas fonctionner, je n'obtiens que ceci :

Fatal error: Uncaught exception 'Zend_Controller_Action_Exception' with message 'IndexController::accueilAction() does not exist and was not trapped in __call()' in C:\www\zf-tutorial\librairie\Zend\Controller\Action.php:480
Stack trace:
    #0 [internal function]: Zend_Controller_Action->__call('accueilAction', Array)
    #1 C:\www\zf-tutorial\librairie\Zend\Controller\Action.php(497): IndexController->accueilAction()
    #2 C:\www\zf-tutorial\librairie\Zend\Controller\Dispatcher\Standard.php(237): Zend_Controller_Action->dispatch('accueilAction')
    #3 C:\www\zf-tutorial\librairie\Zend\Controller\Front.php(909): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    #4 C:\www\zf-tutorial\index.php(45): Zend_Controller_Front->dispatch()
    #5 {main} thrown in C:\www\zf-tutorial\librairie\Zend\Controller\Action.php on line 480

Décrypter le code du Zend Framework n'est pas une sinécure, il y a des renvois dans tous les coins vers d'autres méthodes d'autres classes et je me paume à très grande vitesse. Et finalement, je ne peux pas avancer tant que je n'aurais pas compris le fonctionnement du dispatch : Je veux garder le contrôle de mon architecture. Mais comment la définir dans mon application ?

Voilà, encore merci pour le soutien smile


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#11 08-07-2007 18:31:03

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

Re: [Résolu][Controller][1.0]MVC et architecture

2 remarques rapides déjà, je regarderai plus avant après.

Dans ton front controller, tu ajoutes les paths vers les rep de controllers en indiquant un rep 'controllers', hors on ne retrouve pas cette arbo dans la description juste au dessus, en fait, d'apres la description au dessus, il ne faudrais pas mentionner le rep 'controllers' mais se limiter a index/ ou auth/.

Code:

$frontController->setControllerDirectory(array(
        "default" => $appDir .'application'. $ds .'controleurs',
        "index"   => $appDir .'application'. $ds .' index '. $ds .'controleurs',
        "auth"    => $appDir .'application'. $ds .' auth '. $ds .'controleurs'
    )
);

2/ Dans l'init de ton controller, tu met la vars $Ctrl a $Action . 'Controller'. D'apres ce que j'ai compris, il attend un nom de controller conceptuel, a savoir dans ton cas, $Action, et il ne faut pas non plus prefixer par un path, il cherchera lui meme dans la liste des rep de controller ou trouver ce controller. Mais attention au collision, car ta methode ne gere pas de namespace contrairement au module.

Hors ligne

 

#12 08-07-2007 19:41:02

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Décidément, soit je m'explique mal, soit tu ne saisis pas ce que je veux obtenir ni faire.

On va laisser tomber pour l'instant, je finirai bien par comprendre le fonctionnement de ce truc.

Merci quand même.


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#13 08-07-2007 19:55:06

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

Re: [Résolu][Controller][1.0]MVC et architecture

Bah, y a un pb de path très probable, et si tu utilises la methode forward, il ne faut pas indiquer de chemin physique ni de nom de class mais les memes items qui serait utiliser dans l'url si c'étais le cas. Meme si je n'ai pas compris ce que tu veux faire, ca ne change rien au fonctionnement du ZF et aux remarques que j'ai faites. Tu ne fera jamais fonctionner la methode forward avec un parametre controller ainsi nommé, et le dispatcher ne trouvera pas les controller si les path vers les controllers ne sont pas bon. Désolé de ne pas etre plus clair non plus smile

Dernière modification par TiTerm (08-07-2007 20:16:15)

Hors ligne

 

#14 08-07-2007 21:50:24

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Nicolas Boileau a écrit:

Ce qui se conçoit bien s'énonce clairement et les mots pour le dire arrivent aisément.

En d'autre termes, si tu ne vois pas ce que je veux faire, c'est que je l'ai mal formulé.

Alors il y a peut-être une erreur de ma part au niveau de la technique, je ne suis pas un gourou de la POO et ce que je cherche à faire n'est peut-être pas possible. En y réfléchissant, c'est tout à fait envisageable.
La base fondamentale de ce que je cherche à construire, c'est un IndexController et dans un sous-répertoire "index" des classes étendues de IndexController pour chacune des actions. Donc je garde l'IndexController mais j'externalise les méthodes d'action, n'y gardant que init() et preDispatch(). Si ce n'est pas possible, alors tant pis, je garderai la technique de base qui fonctionne fort bien, à savoir toutes mes méthodes dans l'IndexController, mais chacune appelant un fichier externe qui contient le code procédural correspondant à chaque action.

Alors la question à poser en premier est peut-être bien a suivante : une classe peut-elle via le ZF appeler des classes filles ? Je garde un doute parce que ça induit peut-être une boucle : la classe fille en effet étend une classe qui l'a elle-même appelée.

Pour le _forward, j'avais bien compris que ce sont des noms symboliques et non des chemins qu'il fallait indiquer.

Allez, te tracasse pas trop avec ça, je finirai bien par comprendre le déroulement des procédures du ZF. Il me faudra simplement un peu plus de temps. (Pour info, je suis autodidacte sans formation universitaire, encore moins en informatique wink )


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#15 08-07-2007 22:38:22

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

Re: [Résolu][Controller][1.0]MVC et architecture

Alors, une petite précision sur forward(). Cela ne transfert pas directement mais permet d'établir une chaine. En fait, il ajoute dans la queue le prochain controller/action a dispatcher mais c'est tout. Cad que le controller et l'action courante seront qd meme exécuté. Donc dans le controller courant, il te faut un moyen pour 'catcher' l'action puisque la vraie action sera dans un autre controller "caché" dans un sous rep.
De plus, du fait du moment ou est appelé l'init() d'un controller, je crois qu'on ne peux pas faire de forward vers un autre controller depuis l'init(). Il faut donc déplacer ton  forward dans une autre méthode.

Comme il te faut catcher l'action courante, le plus simple est d'utiliser la methode __call pour que le controller Index puisse trouver une réponse à l'action Accueil par exemple, meme si elle ne se trouve pas physiquement ici. Dans __call, tu met ton forward() (eg : forward('index','ajouter') ). Au retour du _call, le dispatcher reprend la main et constate qu'il y a encore du boulot. A savoir aller dans le controller Acceuil par exemple et executer la methode Action que tu auras indiqué dans le forward.
A partir de la, tu devrais déjà avoir avancé, il forward, reste a savoir si il trouve le controller secondaire.
Si il le trouve, Bingo. Si il te réponde que le controller n'existe pas, c'est que ta pile de path vers les controller n'est pas bonne.
Alors, qd on utilise des modules on peut redéfinir le nom du répertoire qui héberge les controllers via setModuleControllerDirectoryName() mais je n'ai pas vu quelque chose d'équivalent sans les modules. Tu es donc (sauf erreur de ma part) condamnée a modifier ton arbo et a ajouter sous auth et index un sous répertoire controllers dans lequel tu mettras tes sous controllers identification, login, etc...

une derniere raison pour laquelle il pourrait ne pas trouver les controller. Un pb de casse suivant ton environnement. Si c'est sous unix, attention a tes sous controllers : AjouterController.php et loginController.php.

Courage smile

Dernière modification par TiTerm (08-07-2007 22:42:37)

Hors ligne

 

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

fred wolf
Administrateur
Lieu: Bordeaux
Date d'inscription: 09-04-2007
Messages: 96

Re: [Résolu][Controller][1.0]MVC et architecture

Cyrano,

est-ce que tu cherches à faire ça ?

Fred

Hors ligne

 

#17 09-07-2007 14:10:34

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

fred wolf a écrit:

Cyrano,

est-ce que tu cherches à faire ça ?

Fred

hmm heu... possible, je ne sais pas, je vérifierai ça en rentrant chez moi ce soir. En journée, je n'ai vraiment pas le temps, donc impossible de te répondre dans l'immédiat et au bureau, on utilise pas le ZF (Il n'était qu'en version 0.6 quand le projet a été lancé) mais un framework maison.


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#18 09-07-2007 15:14:42

fred wolf
Administrateur
Lieu: Bordeaux
Date d'inscription: 09-04-2007
Messages: 96

Re: [Résolu][Controller][1.0]MVC et architecture

En fait, je ne crois que le lien que j'ai posté précédemment corresponde à ce que tu veux.

Par contre, il y a fort longtemps, il y eut une discussion à ce sujet :

http://www.nabble.com/Action-files-tf36 … #a10094063

Hors ligne

 

#19 09-07-2007 16:08:31

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

fred wolf a écrit:

En fait, je ne crois que le lien que j'ai posté précédemment corresponde à ce que tu veux.

Par contre, il y a fort longtemps, il y eut une discussion à ce sujet :

http://www.nabble.com/Action-files-tf36 … #a10094063

C'est très exactement la nature du problème que j'ai soulevé. Je vais regarder ça de beaucoup plus près ce soir, je suis certain que la solution n'est plus très loin smile

Encore merci. Si ça roule, je viendrai modifier le tag du titre de ce sujet et accessoirement je donnerai la solution si j'arrive à faire quelque chose de présentable et proprement codé wink


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#20 09-07-2007 21:31:42

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Effectivement, ce dernier lien apporte la solution. Je n'en suis pas tout à fait venu à bout à cause d'un autre problème qui s'est du coup mis au jour : je réalise que je n'ai pas non plus la maîtrise des répertoires de vues, les chemins étant automatiquement construits à partir des chemins vers les actions et ça m'oblige à subdiviser là aussi alors qu'au contraire je voulais conserver la subdivision de base.

Mais d'après ce que je peux voir dans le code, on peut redéfinir ces chemins, je vais fouiller un peu plus la doc sur le sujet et je reviendrai avec le résultat si je trouve la solution.

Merci encore.
@+


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#21 09-07-2007 22:33:18

fred wolf
Administrateur
Lieu: Bordeaux
Date d'inscription: 09-04-2007
Messages: 96

Re: [Résolu][Controller][1.0]MVC et architecture

Effectivement tu peux redéfinir le chemin des vues. Il s'agit d'une pile, tu peux ajouter des chemins avec
$view->setScriptPath('/chemin/de/ta/vue');
Le dernier ajouté sera le premier visité afin de trouver la vue désirée.

Ca c'est le comportement de base, maintenant, depuis l'avènement du ViewRenderer, tu peux aussi agir sur les chemins.

Tu pourras glaner plus renseignements dans la doc.

A+

fred

Hors ligne

 

#22 14-07-2007 10:24:37

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Bonjour.

J'avance, petit à petit et le problème de subdivision du contrôleur est résolu. Mais le problème incident qui s'est révélé en forçant un chemin vers les vues demeure.

L'utilisation de setScriptPath ne résoud rien parce que cette méthode me sert à pointer vers le répertoire racine des vues à utiliser. Mais si j'ai une url du type http://localhost/zf-tutorial/accueil_accueil/accueil, j'obtiens ceci :

Uncaught exception 'Zend_View_Exception'
  with message 'script 'accueil-accueil/accueil.phtml'
  not found in path (C:\www\zf-tutorial\application\views\scripts\)'
  in C:\www\zf-tutorial\librairie\Zend\View\Abstract.php:856

Logique, mais ça ne fait pas mon affaire : comment indiquer que le fichier à chercher n'est pas 'accueil-accueil/accueil.phtml' mais seulement 'accueil.phtml'

À première vue, je suis tenté de penser qu'il faudrait surcharger une méthode de Zend_View_Abstract, mais au lieu de m'aventurer dans le brouillard, j'aimerais un conseil si quelqu'un a une piste de solution pour avoir une architecture telle que montrée plus haut.


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#23 14-07-2007 11:53:50

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Après exploration, il semble que ce soit moins compliqué, mais je tombe sur une exception qui, à priori, est incohérente.

Je pars de l'url suivante : http://localhost/zf-tutorial/accueil_accueil/accueil

Dans mon IndexController, j'ai ajouté la modification suivante dans la méthode init():

Code:

//....
        $this->view->setScriptPath($this->view->baseUrl . self::SR .'application'. self::SR .'vues'. self::SR .'templates');
        $this->view->addScriptPath($this->view->baseUrl . self::SR .'application'. self::SR .'vues'. self::SR .'templates'. self::SR .'accueil');
//....

Et le résultat est correctement pris en compte.

J'ai toutefois ajouté dans ma méthode d'action :

Code:

$this->view->render('accueil.phtml');

Seulement voilà, j'obtiens ceci :

Fatal error:
Uncaught exception 'Zend_View_Exception'
  with message 'script 'accueil.phtml' not found
  in path (\zf-tutorial\application\vues\templates\accueil\;\zf-tutorial\application\vues\templates\)'
  in C:\www\zf-tutorial\librairie\Zend\View\Abstract.php:856
Stack trace:
  #0 C:\www\zf-tutorial\librairie\Zend\View\Abstract.php(764):
      Zend_View_Abstract->_script('accueil.phtml')
  #1 C:\www\zf-tutorial\application\controleurs\accueil\AccueilController.php(20):
      Zend_View_Abstract->render('accueil.phtml')
  #2 C:\www\zf-tutorial\librairie\Zend\Controller\Action.php(497):
      Accueil_AccueilController->accueilAction()
  #3 C:\www\zf-tutorial\librairie\Zend\Controller\Dispatcher\Standard.php(237):
      Zend_Controller_Action->dispatch('accueilAction')
  #4 C:\www\zf-tutorial\librairie\Zend\Controller\Front.php(909):
      Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
  #5 C:\www\zf-tutorial\index.php(44):
      Zend_Controller_Front->dispatch()
  #6 {main}
    thrown in C:\www\zf-tutorial\librairie\Zend\View\Abstract.php on line 856

Je comprends d'autant moins, j'ai traqué la moindre erreur d'écriture dans les noms des fichiers ou répertoires, rien à faire : le fichier est bien là où c'est indiqué mais le viewRenderer semble avoir perdu le sens de la vue...

Une idée ?


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

Hors ligne

 

#24 14-07-2007 18:21:13

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

Re: [Résolu][Controller][1.0]MVC et architecture

Bonjour,

il y a plus simple que ta méthode :
http://www.z-f.fr/forum/viewtopic.php?id=218 regarde la réponse #4

Note : l'autre solution c'est de virer le viewRenderer...

A+, philippe


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

Hors ligne

 

#25 14-07-2007 19:28:10

Cyrano
Membre
Lieu: Paris
Date d'inscription: 25-05-2007
Messages: 57
Site web

Re: [Résolu][Controller][1.0]MVC et architecture

Ça ne fonctionne pas mieux et je n'ai pas un résultat différent..... Me semblait que le développement du ZF était assorti de l'objectif "extreme simplicity" : c'est pas gagné hmm

Je soupçonne en outre autre chose : les "/" sont automatiquement transformés en "\" dans les chemins : ça peut être suffisant pour me bousiller le système, j'ai déjà eu des problèmes avec ça.


Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends.
B. Franklin.

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