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 :

Routes par défaut écrasées sans raison


Sujet :

MVC PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut Routes par défaut écrasées sans raison
    Bonjour,

    J'utilise le code suivant pour personnaliser certaines routes :

    Code bootstrap.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $config_route = new Zend_Config_Ini(APPLICATION_PATH . '/config/route.ini');
    $router = $frontController->getRouter();
    $router->addConfig($config_route, 'route')

    Le problème, c'est qu'à partir de la, il ne veut plus executer les vues lorsqu'elles sont appelées par les routes par défauts, je m'explique :

    J'ai un controller membre, action inscription. J'ai assigné la route

    "site.tld/inscription" comme route, si j'essai de joindre cette page par la route standard :

    site.tld/membre/inscription, j'obtient non pas une erreur mais une page blanche (hors-mis le layout).

    Autre exemple, avec un contrôleur qui n'a pas de route :

    site.tld/adminitem renvoi une page blanche (hors-mis layout encore une fois)

    Et si je créé une route_route de adminitem, la cela fonctionne !

    Comment maintenir les routes par défaut ??

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Peux-tu nous montrer le contenu de config/route.ini ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    ;; Item
     
    route.index.type = "Zend_Controller_Router_Route"
    route.index.route = ":type/:page"
    route.index.defaults.controller = "index"
    route.index.defaults.action = "index"
    route.index.defaults.type = "all"
    route.index.defaults.page = "1"
     
    route.indexafficher.type = "Zend_Controller_Router_Route_Regex"
    route.indexafficher.route = "(\w+)/(\d+)/(.+)\.html"
    route.indexafficher.reverse = "%s/%d/%s.html"
    route.indexafficher.defaults.controller = "index"
    route.indexafficher.defaults.action = "afficher"
    route.indexafficher.map.1 = "type"
    route.indexafficher.map.2 = "id"
    route.indexafficher.map.3 = "description"
     
    ;; Membre
     
    route.membreinscription.type = "Zend_Controller_Router_Route"
    route.membreinscription.route = "inscription/"
    route.membreinscription.defaults.controller = "membre"
    route.membreinscription.defaults.action = "inscription"
     
    ;; Gestion des listes de catégories
    route.indexcat.type = "Zend_Controller_Router_Route"
    route.indexcat.route = "cat/:la_cat"
    route.indexcat.defaults.controller = "index"
    route.indexcat.defaults.action = "index"
    route.indexcat.defaults.la_cat = ""
     
    ;; Gestion des top
     
    route.top.type = "Zend_Controller_Router_Route"
    route.top.route = "top/:type/:depuis/:page"
    route.top.defaults.controller = "top"
    route.top.defaults.action = "index"
    route.top.defaults.type = "all"
    route.top.defaults.depuis = "7"
    route.top.defaults.page = "1"
     
    ;; Admin
     
    route.admin.type = "Zend_Controller_Router_Route"
    route.admin.route = "adminitem/"
    route.admin.defaults.controller = "adminitem"
    route.admin.defaults.action = "index"
     
    ;; Ressource
     
    route.equipe.type = "Zend_Controller_Router_Route"
    route.equipe.route = "equipe"
    route.equipe.defaults.controller = "ressource"
    route.equipe.defaults.action = "equipe"
     
    ;; Wall
     
    route.wallafficher.type = "Zend_Controller_Router_Route_Regex"
    route.wallafficher.route = "wall/(\d+)/(\w+)\.html"
    route.wallafficher.reverse = "wall/%d/%s.html"
    route.wallafficher.defaults.controller = "wall"
    route.wallafficher.defaults.action = "afficher"
    route.wallafficher.map.1 = "id"
    route.wallafficher.map.2 = "nom"
    Merci de ton intérêt

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Ton problème vient de la route index qui n'est pas spécifique : elle 'attrappe' toutes les adresses ayant de 0 à 2 paramètres (ex : site.tld/param1/param2).

    Les routes étant traitées dans l'ordre inverse du fichier .ini, c'est la dernière du fichier à être testée, donc pas de souci pour les autres routes déclarées. Par dontre, la route par défaut est testée après toutes celles là... Et donc toutes tes adresses avec moins de trois 'paramètres' y passent...

    Pour résoudre to problème, il faut donc rendre ta route index plus spécifique, plusieurs solutions :
    - ajouter un préfixe ne correspondant à aucun contrôleur (monprefixe/:type/:page) ;
    - préciser le type de données, de façon à ce que ça ne corresponde à aucun contrôleur/action (par exemple indiquer que 'type' ne peut être que 'type-1' et 'type-2', ou que page est obligatoire et doit être numérique, etc...). Pour cette dernière solution, tu peux le déclarer dans ton fichier ini comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    route.index.type = "Zend_Controller_Router_Route"
    route.index.route = ":type/:page"
    route.index.defaults.controller = "index"
    route.index.defaults.action = "index"
    route.index.defaults.type = "all"
    route.index.reqs.page = \d+
    J'ai modifié ta route en supprimant la valeur par défaut 1 pour page, et en lui ajoutant la contrainte '\d+', ce qui a pour effet de rendre ce paramètre numérique obligatoire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    Ok, ma nouvelle route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    route.index.type = "Zend_Controller_Router_Route"
    route.index.route = ":type/:page"
    route.index.defaults.controller = "index"
    route.index.defaults.action = "index"
    route.index.defaults.type = "all"
    route.index.defaults.page = "1"
    route.index.reqs.page = "\d+"
    Ca marche désormais, cependant j'ai un nouveau problème maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->url(array('controller'=>'membre', 'action'=>'modif'), null, true)
    Renvoi l'url courante :/

    Je vois pas pourquoi, surtout avec le 3e paramètre quoi !!

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Feng-Huang Voir le message
    Ok, ma nouvelle route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    route.index.type = "Zend_Controller_Router_Route"
    route.index.route = ":type/:page"
    route.index.defaults.controller = "index"
    route.index.defaults.action = "index"
    route.index.defaults.type = "all"
    route.index.defaults.page = "1"
    route.index.reqs.page = "\d+"
    Ca marche désormais, cependant j'ai un nouveau problème maintenant :
    Attention, avec ça, si tu ne précise que le contrôleur, ce ne sera pas l'action index de ce contrôleur qui sera appelée mais l'action index du contrôleur index puisque ton paramètre page reste facultatif.

    Citation Envoyé par Feng-Huang Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->url(array('controller'=>'membre', 'action'=>'modif'), null, true)
    Renvoi l'url courante :/

    Je vois pas pourquoi, surtout avec le 3e paramètre quoi !!
    je vais fouiller...

    Edit : le deuxième paramètre de l'aide de vue Url correspond à la route à utiliser pour reconstituer l'url.

    Si ce paramètre est null, le router prend la route actuelle... d'où ton problème. Il faut donc que tu utilises cette aide de vue sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->url(array('controller'=>'membre', 'action'=>'modif'), 'default', true)
    pour le forcer à prenrde la route par défaut.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    Merci de t'investir, le site devait ouvrir ce soir, et c'est un des derniers problèmes mineurs qui subsistes !! >_<

    Voici le route.ini actuel :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    ;; Item
     
    route.index.type = "Zend_Controller_Router_Route"
    route.index.route = ":type/:page"
    route.index.defaults.controller = "index"
    route.index.defaults.action = "index"
    route.index.defaults.type = "all"
    route.index.defaults.page = "1"
    route.index.reqs.page = "\d+"
     
    route.indexafficher.type = "Zend_Controller_Router_Route_Regex"
    route.indexafficher.route = "(\w+)/(\d+)/(.+)\.html"
    route.indexafficher.reverse = "%s/%d/%s.html"
    route.indexafficher.defaults.controller = "index"
    route.indexafficher.defaults.action = "afficher"
    route.indexafficher.map.1 = "type"
    route.indexafficher.map.2 = "id"
    route.indexafficher.map.3 = "description"
     
    ;; Membre
     
    route.membreprofil.type = "Zend_Controller_Router_Route"
    route.membreprofil.route = "monprofil/"
    route.membreprofil.defaults.controller = "membre"
    route.membreprofil.defaults.action = "index"
     
    route.membreinscription.type = "Zend_Controller_Router_Route"
    route.membreinscription.route = "inscription/"
    route.membreinscription.defaults.controller = "membre"
    route.membreinscription.defaults.action = "inscription"
     
    route.membrelogin.type = "Zend_Controller_Router_Route"
    route.membrelogin.route = "login/"
    route.membrelogin.defaults.controller = "membre"
    route.membrelogin.defaults.action = "login"
     
    route.membrelogout.type = "Zend_Controller_Router_Route"
    route.membrelogout.route = "logout/"
    route.membrelogout.defaults.controller = "membre"
    route.membrelogout.defaults.action = "logout"
     
    route.membreoubli.type = "Zend_Controller_Router_Route"
    route.membreoubli.route = "oubli/"
    route.membreoubli.defaults.controller = "membre"
    route.membreoubli.defaults.action = "oubli"
     
    ;; Gestion des listes de catégories
    route.indexcat.type = "Zend_Controller_Router_Route"
    route.indexcat.route = "cat/:la_cat"
    route.indexcat.defaults.controller = "index"
    route.indexcat.defaults.action = "index"
    route.indexcat.defaults.la_cat = ""
     
    ;; Gestion des top
     
    route.top.type = "Zend_Controller_Router_Route"
    route.top.route = "top/:type/:depuis/:page"
    route.top.defaults.controller = "top"
    route.top.defaults.action = "index"
    route.top.defaults.type = "all"
    route.top.defaults.depuis = "7"
    route.top.defaults.page = "1"
     
    ;; Ressource
     
    route.equipe.type = "Zend_Controller_Router_Route"
    route.equipe.route = "equipe"
    route.equipe.defaults.controller = "ressource"
    route.equipe.defaults.action = "equipe"
     
    route.concept.type = "Zend_Controller_Router_Route"
    route.concept.route = "concept"
    route.concept.defaults.controller = "ressource"
    route.concept.defaults.action = "concept"
     
    route.recherche.type = "Zend_Controller_Router_Route"
    route.recherche.route = "recherche"
    route.recherche.defaults.controller = "ressource"
    route.recherche.defaults.action = "recherche"
     
    route.dico.type = "Zend_Controller_Router_Route"
    route.dico.route = "dico"
    route.dico.defaults.controller = "ressource"
    route.dico.defaults.action = "dico"
     
    ;; Wall
     
    route.wallafficher.type = "Zend_Controller_Router_Route_Regex"
    route.wallafficher.route = "wall/(\d+)/(\w+)\.html"
    route.wallafficher.reverse = "wall/%d/%s.html"
    route.wallafficher.defaults.controller = "wall"
    route.wallafficher.defaults.action = "afficher"
    route.wallafficher.map.1 = "id"
    route.wallafficher.map.2 = "nom"
     
    route.mywall.type = "Zend_Controller_Router_Route"
    route.mywall.route = "mywall"
    route.mywall.defaults.controller = "wall"
    route.mywall.defaults.action = "manage"
    L'url est assemblée sur la page "monsite.tld/monprofil", et renvoi donc la dites url comme énoncé dans mon post précédent.

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Edit : le deuxième paramètre de l'aide de vue Url correspond à la route à utiliser pour reconstituer l'url.

    Si ce paramètre est null, le router prend la route actuelle... d'où ton problème. Il faut donc que tu utilises cette aide de vue sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->url(array('controller'=>'membre', 'action'=>'modif'), 'default', true)
    pour le forcer à prenrde la route par défaut.
    Et avec ton route.ini actuel, tu as toujours le problème avec l'adresse 'monsite/membre' par exemple qui ne t'enverra pas vers le contrôleur membre mais vers le contrôleur index (via la route index)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    Oui j'ai bien compris, mais comme tu le vois "/membre/" est appelé via une route perso "/monprofil/", et comme dans les autres cas je précise l'action :d

    Et je ne savais pas pour la conversation de la route ! Mais en y repensant c'est logique, pour que les autres paramètres de l'url suivent la route perso.

    Merci bien, all is now alright

Discussions similaires

  1. [1.x] Route par défaut et sfGuardPlugin
    Par jejeman dans le forum Symfony
    Réponses: 2
    Dernier message: 23/09/2010, 10h02
  2. [DW 8 & antérieurs] Encodage des caractères en utf8 par défaut (sans utf8_encode)
    Par haltabush dans le forum Dreamweaver
    Réponses: 7
    Dernier message: 11/02/2009, 10h56
  3. objet "this" mis à jour par une méthode sans raison
    Par Macomoul dans le forum Langage
    Réponses: 8
    Dernier message: 03/02/2008, 17h11
  4. access : calcul d'une somme de 0 sans valeur par défaut
    Par ericbelgium dans le forum Access
    Réponses: 6
    Dernier message: 06/10/2005, 09h05
  5. Liste déroulante sans valeur par défaut ?
    Par magic8392 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/02/2005, 16h59

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