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

Zend Framework PHP Discussion :

Utilisation de Zend_Controller_Router_Route_Regex [ZF 1.11]


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut Utilisation de Zend_Controller_Router_Route_Regex
    Bonjour,
    Je rencontre des difficultés dans la création de mon fichier INI pour mes routes,
    je veux créer un premier groupe de route pour les pages "index*" (en français par exemple je veux "index-fr.html", par contre j'ai une rubrique "articles" où je veux pouvoir mettre n'importe quel type d'url ("monarticle.html"), et là je sèche dans les expressions régulières, voici ce que j'ai fait :

    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
     
    routes.home.type = "Zend_Controller_Router_Route_Regex"
    routes.home.route = "(index)*"
    routes.home.defaults.module = "frontend"
    routes.home.defaults.controller = "index"
    routes.home.defaults.action = "index"
    routes.home.map.1 = "myurl"
    routes.home.reverse = "index%s"
     
    routes.article.type = "Zend_Controller_Router_Route_Regex"
    routes.article.route = "(\w)"
    routes.article.defaults.module = "frontend"
    routes.article.defaults.controller = "article"
    routes.article.defaults.action = "index"
    routes.article.map.1 = "myurl"
    routes.article.reverse = "%s.html"
    mais j'ai des 404, d'avance merci pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut Finalement je vais utiliser un autre procédé
    Finalement je vais utiliser un autre procédé, je vais utiliser un Plugin :
    En sachant que mes infos sont stockées en BD : pour chaque URL les infos de la route, du module, du controller, de l'action sont stockées.
    Ainsi, je prends l'URL et je vais chercher les infos dans la BD et je les applique à la Route. Cela fonctionne parfaitement : le seul problème : lorsque je change de langue, mon "/fr" pose souci, ZF en fait un controller et me provoque une erreur 404, je n'arrive pas à trouver la solution.
    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
     
    class Plugin_CustomRouter extends Zend_Controller_Plugin_Abstract
    {
        public function routeStartup(Zend_Controller_Request_Abstract $request)
        {
     
            $urlPage = App_Tools::getCurrentUrl();
            $mapper = new Frontend_Model_VinfospageMapper();  	
            $maPage = $mapper->getPageByUrl($urlPage);
     
            if($maPage){
                if('frontend' == $maPage->getModule()){//Uniquement valable pour le Frontend
            		$maPageRoute = $maPage->getRoute();
            		if($maPageRoute){
     
            		    $fc = Zend_Controller_Front::getInstance();
            		    $router = $fc->getRouter();
     
                        $route =  new Zend_Controller_Router_Route_Regex('[-\w]+)\.html?', array(
                    		'module'	=> $maPage->getModule(),
                    		'controller'	=> $maPage->getController(),
                    		'action'	=> $maPage->getAction()
                    	), array(
                    		1	=> 'myrurl'
                    	), '%s.html');
     
                    	$router->addRoute($maPageRoute, $route);
                    	return $router;
            		}
            	}
            }
        }
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut La solution ultime
    Finalement, j'ai trouvé grâce à une bonne REGEX et un peu de code :
    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
     
    class Plugin_CustomRouter extends Zend_Controller_Plugin_Abstract
    {
        public function routeStartup(Zend_Controller_Request_Abstract $request)
        {
     
            $urlPage = App_Tools::getCurrentUrl();
            $mapper = new Frontend_Model_VinfospageMapper();  	
            $maPage = $mapper->getPageByUrl($urlPage);//On load les infos de la page provenant de la BD
     
            if($maPage){
                if('frontend' == $maPage->getModule()){//Uniquement valable pour le Frontend (la reecriture ne s'applique pas sur le Backend
     
            		$maPageRoute = $maPage->getRoute(); //Je load ma route a la volee, celle-ci provient aussi de BD : attention il est indispensable de nommer la route pour faire "addRoute"
     
            		if($maPageRoute){
     
            		    $fc = Zend_Controller_Front::getInstance();
            		    $router = $fc->getRouter();
     
            		    //Liste des locales
            		    $listLocales = self::mapLocaleBase(); // me renvois par exemple "^(fr|es|cn)"
     
            		    //On fixe le trio module/controller/action à la volée avec les infos provenant de la BD
                        $route =  new Zend_Controller_Router_Route_Regex($listLocales.'[-\w]+)\.html?', array(
                    		'module'	=> $maPage->getModule(),
                    		'controller'	=> $maPage->getController(),
                    		'action'	=> $maPage->getAction()
                    	), array(
                    		1	=> 'myrurl'
                    	), '%s.html');//Ameliration possible : gestion de l'extension pour encore plus de souplesse
     
                    	$router->addRoute($maPageRoute, $route); // Cela fonctionne parfaitement pour moi
                    	return $router;
            		}
            	}
            }
        }
     
        /**
         * 
         * Permet de fournir une liste de localeBase pour les dossiers langues
         */
        private function mapLocaleBase()
        {
        	$maListe = "";
        	$model = new Frontend_Model_Languesite();
        	$mapper = new Frontend_Model_LanguesiteMapper();
        	$arrListeLang = $mapper->fetchAllActif(false);
     
        	if($arrListeLang){
        		$count = count($arrListeLang);
        		$compteur = 1;
        		for($i=0;$i<$count;$i++){
        			if(isset($arrListeLang[$i])){
    	    			$line = $arrListeLang[$i];
    	    			if($line->getIs_default() == 0){
    	    				if($compteur >= 2) $maListe .= '|';
    	    				$compteur++;
    	    				$maListe .=(string) $line->getLocal_base();
    	    			}
        			}
        		}
        	}
     
        	if(empty($maListe)) return "("; //Liste vide
        	return '(^((' . $maListe . ')\/)?'; // Au moins 1 langue
        }
    }

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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