Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/12/2011, 16h49   #1
Membre du Club
 
Homme Brice
Ingénieur d'études en développements techniques
Inscription : novembre 2005
Messages : 190
Détails du profil
Informations personnelles :
Nom : Homme Brice
Âge : 40
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 : 190
Points : 55
Points : 55
Envoyer un message via MSN à bpdelavega
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 :
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.
bpdelavega est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 09h47   #2
Membre du Club
 
Homme Brice
Ingénieur d'études en développements techniques
Inscription : novembre 2005
Messages : 190
Détails du profil
Informations personnelles :
Nom : Homme Brice
Âge : 40
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 : 190
Points : 55
Points : 55
Envoyer un message via MSN à bpdelavega
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 :
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;
        		}
        	}
        }
    }
}
bpdelavega est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 12h44   #3
Membre du Club
 
Homme Brice
Ingénieur d'études en développements techniques
Inscription : novembre 2005
Messages : 190
Détails du profil
Informations personnelles :
Nom : Homme Brice
Âge : 40
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 : 190
Points : 55
Points : 55
Envoyer un message via MSN à bpdelavega
Par défaut La solution ultime

Finalement, j'ai trouvé grâce à une bonne REGEX et un peu de code :
Code :
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
    }
}
bpdelavega est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h01.


 
 
 
 
Partenaires

Hébergement Web