Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-01-2013 12:12:15

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

[Résolu]Problème avec les routes

Bonjour
Je me suis lancé dans zf2 en suivant le tuto sur el site officiel.
Tout marche mais mon soucis est quand j'essaye d'ajouter un controler.

Dans module.config.php j'ai bien ajouter :
    'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController',
            'Application\Controller\Test' => 'Application\Controller\TestController',
        ),
    ),


J'ai créer le TestController.php et son index.phtml

Mais j'ai cette erreur quand je vais sur la page :
A 404 error occurred
Page not found.
The requested URL could not be matched by routing.

Qulqu'un peut il m'éclairer? svp

Merci

Dernière modification par Nirzol (25-01-2013 11:27:17)

Hors ligne

 

#2 11-01-2013 14:23:30

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu]Problème avec les routes

Salut la réponse est simple, si tu lis le message d'erreur qui t'es donné tu la trouves.
De plus cette question a déjà été posée donc un petit tour dans la recherche ça fait pas de mal smile.

Nirzol a écrit:

The requested URL could not be matched by routing.

Donc là ce qu'il se passe c'est que l'url que tu donnes ne correspond à aucune route.

Ce qui me vient à te poser la question, comment le framework ferait pour savoir quel url est associée à un contrôleur ? Il faut que tu lui dises à un moment donné.

Hors ligne

 

#3 14-01-2013 00:57:39

jmleroux
Membre
Lieu: Nantes
Date d'inscription: 14-11-2012
Messages: 32
Site web

Re: [Résolu]Problème avec les routes

Quelle url appelles-tu ?
Pour peu que tu aies une action "index" dans ton testController, la route par défaut livrée avec le ZendSkeleton serait

application/test/index

C'est souvent l'oubli du 'application' au début qui put être déroutant.

Hors ligne

 

#4 14-01-2013 04:50:46

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

Bonjour
merci de vos réponses.

@okren justement ou lui dire cela ? Je n'ai pas trouver réponses qui résout mon problème hmm

@jml44 oui c'est bien ça http://monsite.com/application/test marche
Par contre http:/monsite.com/album/test  non le tuto proposé sur le site de zend
'ai l'erreur suivante en allant sur l'adresse
The requested controller was unable to dispatch the request.

Controller:
Album\Controller\Album

Merci

Dernière modification par Nirzol (14-01-2013 04:59:34)

Hors ligne

 

#5 14-01-2013 09:20:25

jmleroux
Membre
Lieu: Nantes
Date d'inscription: 14-11-2012
Messages: 32
Site web

Re: [Résolu]Problème avec les routes

Tu as bien cette route dans ta configuration ?

Code:

[lang=php]    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ),

    // The following section is new and should be added to your file
    'router' => array(
        'routes' => array(
            'album' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/album[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Album\Controller\Album',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),

Dernière modification par jml44 (14-01-2013 09:21:06)

Hors ligne

 

#6 14-01-2013 09:37:46

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu]Problème avec les routes

Nirzol a écrit:

@okren

Orkin hmm

Nirzol a écrit:

Par contre http:/monsite.com/album/test  non le tuto proposé sur le site de zend
'ai l'erreur suivante en allant sur l'adresse
The requested controller was unable to dispatch the request.

Controller:
Album\Controller\Album

La configuration par défaut des routes au niveau des contrôleurs est comme ceci :
nom-du-module/nom-du-controleur-sans-le-mot-controleur/nom-de-l-action-sans-le-mot-action

Donc à partir de là lorsque tu ajoutes un contrôleur dans un module tu dois suivre cette règle par défaut. Ce qui explique pourquoi ton testController qui se situe dans ton module application est accessible via http://monsite.com/application/test qui équivaut à http://monsite.com/application/test/index

Donc pour la partie album il faut déjà activé le module comme expliqué dans le tuto. Ensuite créer un contrôleur dans le module en question donc là Album, créer un contrôleur qui s'appelle TestController et une méthode indexAction pour que cette url fonctionne http://monsite.com/album/test

Ca c'est la partie par défaut qui est expliquée normalement dans le tutoriel ici http://framework.zend.com/manual/2.0/en … llers.html

Ensuite la configuration que tu as mis dans ton module.config.php pour les invokables ça permet de définir à ton service manager un alias pour tes contrôleurs test et index et de lui permettre de les instancier tout seul comme un grand lorsque l'url fait appelle à un de ces contrôleurs.

Ensuite cet alias tu peux l'utiliser pour récupérer le contrôleur via le service manager et/ou faire de la configuration dans le fichier module.config.php et notamment définir une route pour y accéder. Donc encore une fois dans ce tutoriel tu as une route pour le module Album de définie avec l'action et l'id qui sont optionnel et qui lorsqu'ils sont saisi (dans l'url) doivent respecter les regexp indiqué en contrainte.
Ensuite par défaut tu as le contrôleur qui est spécifié afin de savoir lequel utiliser, pour lui spécifier le contrôleur il faut utiliser l'alias renseigné ci-dessus dans la partie invokables du contrôleur en question. Les règles de nommage préconisent de donner le FQCN de la classe comme alias afin de savoir tout de suite à quoi on a affaire et surtout ne pas avoir à aller chercher quel alias on a pu donner.
Tu peux voir aussi que la route est de type segment et qu'il existe plusieurs type de route. Les moins gourmandes sont les literal car il n'y a pas de traitement à faire (regexp, lire l'url avec les paramètres optionnels ou non etc ...). Tu peux donc définir une route de A à Z en lui spécifiant de la même manière le contrôleur et l'index en utilisant une route de type literal.
Dans ce cas tu lui donnes un nom, dans le tutoriel elle s'appelle album, tu lui donnes un type dans le tutoriel segment mais tu peux mettre literal par exemple (dans ce cas pas d'url avec [:/monparam]), lui donner une route par exemple '/album/test' ou 'album/test' (je sais plus si faut mettre le /), un contrôleur et une action.

Je te laisse chercher un peu pour ça tu as la doc qui donne des exemples

Hors ligne

 

#7 14-01-2013 12:20:07

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

Désolé Orkin pour le pseudo mal écrit. smile

Merci à vous pour vos réponses.

@jml44 oui c'est comme ça le voici, c'est le module.config.php de Album

Code:

[lang=php]
<?php
return array(
    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
            'Album\Controller\Test' => 'Album\Controller\TestController',
        ),
    ),

        // The following section is new and should be added to your file
        'router' => array(
                'routes' => array(
                        'album' => array(
                                'type'    => 'segment',
                                'options' => array(
                                        'route'    => '/album[/:action][/:id]',
                                        'constraints' => array(
                                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                'id'     => '[0-9]+',
                                        ),
                                        'defaults' => array(
                                                'controller' => 'Album\Controller\Album',
                                                'action'     => 'index',
                                        ),
                                ),
                        ),
                ),
        ),
    
    'view_manager' => array(
        'template_path_stack' => array(
            'album' => __DIR__ . '/../view',
        ),
    ),
);

@Orkin
J'ai bien créer TestController dans Album dans son dossier Controller, j'ai fais exactement comme pour le dossier Application avec indexAction .

Code:

[lang=php]
namespace Album\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class TestController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

J'ai aussi son index.phtml dans view/album/test

Et quand je vais sur monsite.com/album/test j'ai l'erreur cité avant.
En lisant ce que tu dis en gros il cherche l'action test de album? et non le controller test de album?  :S
Ce qui parait logique hmm Je suis un peu perdu avec se system de routes dans zf2

Hors ligne

 

#8 14-01-2013 13:44:25

jmleroux
Membre
Lieu: Nantes
Date d'inscription: 14-11-2012
Messages: 32
Site web

Re: [Résolu]Problème avec les routes

Nirzol a écrit:

En lisant ce que tu dis en gros il cherche l'action test de album?

C'est exactement ça.
Pour l'instant, seule l'action "index" existe dans ton controller, donc l'erreur est normale.

Si tu veux accéder à quelque chose en album/test, il te faut une action testAction() et une vue 'test.phtml' dans le répertoire 'test' ,mais cela peut être changé en spécifiant le template de vue.
Ce qui au passage améliore les performances car il n'y a pas besoin d'interpoler le script de vue.

Dernière modification par jml44 (14-01-2013 13:44:43)

Hors ligne

 

#9 15-01-2013 05:01:06

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

Ok merci. Oui si je crée l'action cela marche bien.
Mais comment faire pour que mon nouveau controller soit pris en compte ?

Hors ligne

 

#10 15-01-2013 06:40:10

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

J'ai modifier mon module.config.php. Pouvez vous me dire si la manière de faire est correct svp?
En gros à la racine du site je gère les action de indexcontroller
monsite.com/action  <-- de indexcontroller

Pour les autres controllers de Application, ils sont appelés comme cela :

monsite.com/application/controller/action

Quand pensez vous?

Ci-dessous mon code si cela peut aider.

Code:

[lang=php]
return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                //'type'    => 'segment',
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                   // 'route'    => '/[:action][/:id]',
                    'route'    => '/',
                    'constraints' => array(
                        //'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                        //'id'         => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),
        'application' => array(
                    'type'    => 'segment',
                    'options' => array(
                            //'route'    => '/application[/:controller][/:action][/:id]',
                                'route'    => '[/:controller][/:action][/:id]',
                            'constraints' => array(
                                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'id'         => '[0-9]+',
                            ),
                            'defaults' => array(
                                    '__NAMESPACE__' => 'Application\Controller',
                                    'controller' => 'Application',
                                    'action'     => 'index',
                            ),
                    ),
                    'may_terminate' => true,
                    'child_routes' => array(
                            'default' => array(
                                    'type'    => 'Wildcard',
                                    'options' => array(
                                    ),
                            ),
                    ),
            ),
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        ),
    ),
    'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController',
            'Application\Controller\Test' => 'Application\Controller\TestController',
        ),
    ),
    'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

Dernière modification par Nirzol (16-01-2013 09:13:30)

Hors ligne

 

#11 15-01-2013 09:24:50

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu]Problème avec les routes

Salut, on a pas grand chose à en penser en fait c'est toi qui fait tes routes en fonction de tes besoins. Si tu penses que c'est pertinent de faire comme ça alors c'est correct sinon ça ne l'est pas.

Cependant je te conseil d'utiliser les routes de type literal le plus possible car moins gourmande en ressource (pas de regex à exécuter). Bien évidemment on ne peux pas tout faire avec par moment un type wilcard ou segment est nécessaire mais je préfère utiliser les routes de type literal au maximum puis faire des child routes pour préciser les petites portions d'url qui en ont besoin.

Pour que ton nouveau contrôleur soit pris en compte je pense que tu as trouvé et j'avais déjà donné la réponse plus haut mais je vais la redonner si d'autres ont des difficultés. Il faut l'ajouter dans la portion l'index invokables dédié aux contrôleurs dans le module.config.php

Hors ligne

 

#12 15-01-2013 09:48:40

jmleroux
Membre
Lieu: Nantes
Date d'inscription: 14-11-2012
Messages: 32
Site web

Re: [Résolu]Problème avec les routes

Nirzol a écrit:

Pour les autres controllers de Application, ils sont appelés comme cela :

monsite.com/application/controller/action

Quand pensez vous?

La route par défaut 'application' est à mon avis une route de développement, mais tu devrais établir des routes plus spécifiques (et plus performantes) par la suite.

Hors ligne

 

#13 16-01-2013 08:08:02

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

Merci pour votre aide.
Dommages qu'il n'y est pas de best practice pour les routes.

smile

Hors ligne

 

#14 16-01-2013 08:35:33

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu]Problème avec les routes

Il n'y a pas vraiment de best practice c'est à chacun de faire comme il le souhaite et en fonction de l'application. Une application qui va être destinée à très peu d'utilisateurs avec très peu de route peut surement utiliser les routes génériques par contre une application plus gourmande pourrait voir ses performance diminuer du fait qu'en plus de ça il y a surement des bouts de code à exécuter à chaque requête (pour récupérer la conf, des infos à droite à gauche etc ...)

Hors ligne

 

#15 16-01-2013 09:11:40

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: [Résolu]Problème avec les routes

Oui tu as raison orkin. Du coup, j'ai un peu modifier mes routes pour éviter d'avoir des segments.
Ainsi monsite.com/controller/action  <-- voila comment je vais gérer, ce qui me parait + logique comme je faisait avec ZF1

Et pour le home je fais un literal pour que monsite.com/ pointe sur monsite.com/index/index

Cf. plus haut pour les modifications

Hors ligne

 

#16 16-01-2013 09:35:31

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu]Problème avec les routes

Ca me semble pas mal smile

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