IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Routage et classement des fichiers controlleurs [ZF 1.10]


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Routage et classement des fichiers controlleurs
    Bonjour,

    je débute sur l'utilisation de Zend Framework en MVC et j'aurais voulu quelques conseils.
    J'ai un site disposant d'articles rangés dans plusieurs catégories. L'idée est d'avoir une url de ce type, exemple : www.monsite.fr/articles/php/CreerUnSingleton
    Mon site fonctionne selon MVC avec comme controlleur ma catégorie (ici php) et comme action le nom de mon article (ici CreerUnSingleton). Donc pour intercaller la "super categorie" articles j'ai modifié ma route dans mon bootstrap comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $route = new Zend_Controller_Router_Route(
              ':articles/:controller',
              array(
              'articles'   => 'articles',
                  'controller' => 'php',
                  'action'     => 'resume' //affiche par defaut une liste des articles de la catégorie
                  )
                             );
    Mais lorsque je saisie www.monsite.fr/php/CreerUnSingleton je croyais que l'url allait devenir www.monsite.fr/articles/php/CreerUnSingleton, mais non ? Aussi les 2 URL précédentes me renvoient vers ma page mais moi je souhaiterais avoir une URL www.monsite.fr/articles/php/CreerUnSingleton si quelqu'un saisie www.monsite.fr/php/CreerUnSingleton
    Je tiens à classer mes catégories dans cette super catégorie car je possède d'autres "super catégorie".

    De plus, afin de m'y retrouver lorsque les articles seront nombreux j'aurais voulu savoir s'il était possible de ranger les controlleurs associés à mes articles dans un dossier particulier. Ainsi passer de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    - Application
            - models
            - views
            - controllers
                   -PhpController.php
                   -BashController.php
                   -...
            -ContactController.php
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - Application
        - models
        - views
        - controllers
            - Articles
                -PhpController.php
                -BashController.php
                -...
            -ContactController.php
    Merci pour vos lumières

  2. #2
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Bonjour,

    Je pense que l'idéal pour toi serait de faire une application modulaire.
    Ainsi ta structure serais celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    - Application
        - modules
            - articles
                 - models
                 - views
                 - controllers
                        -PhpController.php
                        -BashController.php
                        -...
           - default
                  - models
                  - views
                  - controllers
                         -ContactController.php
    Ainsi il te sera plus facile de ranger les grandes sections de ton site.
    Pour le routeur, le problème est que tu devra faire une route pour chaque controlleur:

    exemple pour 'www.monsite.fr/php/CreerUnSingleton' tu devra faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $route = new Zend_Controller_Router_Route(
              'php/:article',
              array(
                  'module'   => 'articles',
                  'controller' => 'php',
                  'action'     => 'resume' //affiche par defaut une liste des articles de la catégorie
                  )
                             );
    Sinon une regex aussi pourrait faire l'affaire... '(php|bash)/([-a-zA-Z0-9]+)'
    Le problème étant que tu est un peu obligé d'insérer un indicateur pour trouver ta route car sinon n'importe quelle url te renverra vers :article/:controller

    Je sais pas si je me suis bien fait comprendre.....mais bon c'est le matin je suis pas encore réveillé!

  3. #3
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Citation Envoyé par manuscle
    Je pense que l'idéal pour toi serait de faire une application modulaire.
    J'y est pensé mais le problème est que je vais devoir dupliquer des informations comme views/layouts/layout.phtml, views/common/titre.phtml, views/common/menu_droit.phtml, ... donc pas possible. N'y a t il pas d'autres solutions ?
    Citation Envoyé par manuscle
    Le problème étant que tu est un peu obligé d'insérer un indicateur pour trouver ta route car sinon n'importe quelle url te renverra vers :article/:controller
    La proposition que tu me fait est dans le cas ou j'utilise un module articles et dans ta solution que tu me proposes donne cette URL 'www.monsite.fr/php/articles/CreerUnSingleton' et moi je souhiate celle-ci 'www.monsite.fr/articles/php/CreerUnSingleton'

    Merci pour tes explications

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    L'organisation par module est correcte.

    Pour ton layout.phtml, rien ne t'empêche de le sortir de ton /script/view et le mettre à la racine de apllication.

    /application/layouts/scripts/layout.phtml

    ensuite dans ton config.ini, tu ajoute la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Citation Envoyé par Général03 Voir le message
    J'y est pensé mais le problème est que je vais devoir dupliquer des informations comme views/layouts/layout.phtml, views/common/titre.phtml, views/common/menu_droit.phtml, ... donc pas possible. N'y a t il pas d'autres solutions ?
    MaitrePylos à raison, si tu as un layout général tu ne rencontrera pas ce problème.... J'ajouterais même que tu peux avoir un script genre article.phtml que tu peux demander à chaque controlleur de rendre par defaut.

    Citation Envoyé par Général03 Voir le message
    La proposition que tu me fait est dans le cas ou j'utilise un module articles et dans ta solution que tu me proposes donne cette URL 'www.monsite.fr/php/articles/CreerUnSingleton' et moi je souhiate celle-ci 'www.monsite.fr/articles/php/CreerUnSingleton'
    Non pas du tout, si ça ne te dérange pas d'avoir 'articles' en début d'url c'est parfait car tu as juste à faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $route = new Zend_Controller_Router_Route(
              'articles/:controller/:alias/*',
              array(
                  'module'   => 'articles',
                  'action'     => 'resume' //affiche par defaut une liste des articles de la catégorie
                  )
                             );
    :alias étant l'alias url de ton article, en gros:
    www.toto.com/articles/php/CreerUnSingleton te renverra comme parametres:
    module: articles
    controller: php
    action: resume
    alias: CreerUnSingleton

    le /* à la fin te permet de catcher cette route même si tu insère des parametres supplémentaires à la fin de l'url, tu pourras faire ceci:
    http://www.toto.com/articles/php/Cre...ngleton/page/2

  6. #6
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Citation Envoyé par MaitrePylos
    L'organisation par module est correcte.
    Ok si on peut sortir mes templates je vais utiliser un module articles.
    Citation Envoyé par manuscle
    Non pas du tout, si ça ne te dérange pas d'avoir 'articles' en début d'url c'est parfait
    C'est exactement la route que je veux

    Par contre petite question sur ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $route = new Zend_Controller_Router_Route(
              'articles/:controller/:alias/*',
              array(
                  'module'   => 'articles',
                  'action'     => 'resume' //affiche par defaut une liste des articles de la catégorie
                  )
                             );
    :controller et :alias sont connus dans ZF ? Ou un oubli de configuration dans le array() ?

    Merci

  7. #7
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Pas tout à fait, ce sont des clé qui sont utilisées comme parametres.

    :controller est connu dans ZF, mais l'ajouter ici permet d'ecraser le controller das la requete
    :alias lui c'est un parametre fait maison, t'aurais très bien pu l'appeler 'toto' ou n'importe...

    Dans le deuxième argument de Zend_Controller_Router_Route, tu précise les valeurs par defaut si une partie de la route n'est pas définie dans l'url....

    Lit la doc Zend_Controller_Router_Route si tu comprend pas ce que j'explique car j'ai un peu de mal aujourd'hui....

  8. #8
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    On se disperse de trop à en oublier le problème. Voilà ma config du routeur dans le bootstrap
    $route = new
    Zend_Controller_Router_Route(
    'articles/:controller/:action/*',
    array(
    'module' => 'articles',
    'controller' => 'categorie',
    'action' => 'resume' )
    );
    Cette configuration fonctionne, et voilà son comportement :
    URL saisie => Module, Controlleur, Action
    www.monsite.fr/articles => articles, categorie, resume
    www.monsite.fr/articles/php => articles, php, resume
    www.monsite.fr/articles/php/CreerUnsingleton => articles, php, CreerUnsingleton

    La seul question est de savoir si je peut changer l'URL de cette facon :
    URL saisie dans la barre d'adresse du navigateur => URL finale dans la barre d'adresse du navigateur
    www.monsite.fr/articles =>www.monsite.fr/articles/categorie/resume
    www.monsite.fr/articles/php => www.monsite.fr/articles/php/resume

    Donc ne pas cacher les controller et action dans l'URL.

    Merci

  9. #9
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Excuse moi mais je ne comprend pas...

    En fait ce que tu veux, c'est lorsque l'utilisateur saisi www.monsite.fr/articles, le rediriger vers www.monsite.fr/articles/categories/resume ?

  10. #10
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Ca dépend se que tu entends par rediriger : moi je veux dans l'URL ceci www.monsite.fr/articles/categories/resume lorsque quelqu'un souhaite saisie une URL comme ceci www.monsite.fr/articles
    C'est vraiement juste de l'affichage car le routeur fonctionne correctement.

  11. #11
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Ah ben dans ce cas tu est obligé de faire une redirection car le routeur lui redirige mais de manière transparente au navigateur.... sinon je ne vois pas trop comment faire autrement.
    Mais juste par curiosité, j'aimerais comprendre le réel interret, qu'est-ce qui t'embete dans le fait de voir affiché dans l'url www.monsite.fr/articles à la place de www.monsite.fr/articles/categories/resume?

    Sinon la solution la plus simple à mon humble avis est de supprimer le routage, ce qui aura pour effet d'appeler modules/articles/IndexController::indexAction() et dans l'action tu fait un forward vers /articles/categories/resume
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Articles_IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            $this->_reditect('/articles/categories/resume');
        }
    }

  12. #12
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Je viens d'essayer ta solution mais pas ré écriture de l'URL j'en conclus que ce n'est pas possible ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classement des fichiers en réseau
    Par mathieu_t dans le forum Applications
    Réponses: 3
    Dernier message: 30/08/2014, 22h30
  2. Classement des fichiers compilés
    Par noftal dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/01/2014, 11h32
  3. lecture fichier et classement des données
    Par membreComplexe12 dans le forum C++
    Réponses: 20
    Dernier message: 24/11/2010, 14h55
  4. Classement des fichiers d'un répertoire par date
    Par lunick dans le forum Langage
    Réponses: 1
    Dernier message: 16/06/2008, 14h22
  5. Classement des fichiers
    Par php_de_travers dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo