Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-12-2009 04:24:10

blackstones
Nouveau membre
Date d'inscription: 27-06-2009
Messages: 4

Zend_Config_Ini + Zend_Router_route

Bonjour à tous, je voudrais vous soumettre un problème que je rencontre avec Z-F.

Tout d'abord Voilà ce que j'essaie de faire:

Je veux chargé mes routes depuis un Fichier INI, jusque là rien d'extraordinaire. J'ai suivi la documentation à la lettre comme suit :

Mon fichier config.ini

Code:

. . . 
[router]
routes.mod.route = ":module/:controller/:action/*"

routes.dire.type = "Zend_Controller_Router_Route_Regex"
routes.dire.route = "dire(?:/(.+))?"
routes.dire.defaults.controller = "index"
routes.dire.defaults.action = "index"
routes.dire.defaults.module = "default"
routes.dire.defaults.message = "Bonjour"
routes.dire.map.1 = "message"
routes.dire.reverse = "dire/%s"

Ne faite pas attention au motif de la route, c'est juste une route de test du style "dire bonjour".

Dans mon bootstrap (j'ai fait mon bootstrap sous forme de plugins) dont voici un extrait:

Code:

<?php

class Plugins_Bootstrap extends Zend_Controller_Plugin_Abstract{
    /**
     * 
     * @var unknown_type
     */
    protected $_root;
    
    protected $_root_ap;
    
    protected $_front;

    public function __construct($env = null,$root = null,$ap_root = null){
         $this->_env = $env;  
   
         // détection de la racine des documents  
         if (null === $root) {  
           $root = realpath('.') ;  
         }  
         $this->_root = $root;  
         
         // détection du chemin vers l'application  
         if (null === $ap_root) {  
           $ap_root = $root . '/application' ;  
         }  
         $this->_root_ap = $ap_root;  
         
         // initialisation de la configuration  
         $this->initConfig();  
         
         // récupération d'une référence vers le contrôleur  
         $this->_front = Zend_Controller_Front::getInstance();  
         
         if ($env == 'development') {  
           // on active l'affichage de toutes les erreurs  
           error_reporting(E_ALL | E_STRICT);    
           ini_set('display_startup_errors', 1);    
           ini_set('display_errors', 1);   
           
           $this->_front->throwExceptions(true);    
        }
    }
    
    
    public function routeStartup(Zend_Controller_Request_Abstract $request){
         . . .
         $this->initRoutes();          // initialisation des routes depuis le fichier INI  
        . . .
    }
    
    public function initControllers(){
        $this->_front->addModuleDirectory($this->_root_ap.'/modules');
        $this->_front->setControllerDirectory(array(
                        'default'=>$this->_root_ap.'/modules/default/controllers',
                            'admin'=>$this->_root_ap.'/modules/admin/controllers'
                                                    )); 
                                                    
        $this->_front->setDefaultModule('default');        
        $this->_front->setDefaultControllerName('index');                    
    }
###############################################################
    public function initRoutes(){
        $router = new Zend_Controller_Router_Rewrite();
        $config = new Zend_Config_Ini($this->_root_ap.'/configs/config.ini',"router");
        $router->addConfig($config,"routes");
        $this->_front->setRouter($router);
    }
###############################################################    
    
    public function preDispatch(Zend_Controller_Request_Abstract $request){
        $module = $request->getModuleName();
        if ('admin' == $module){
            Zend_Layout::getMvcInstance()->setLayoutPath($this->_root_ap.'/modules/admin/layouts');
        }
    }
}

?>

Mais apparemment, il ne prend pas en compte ma route quand j'essaue d'attendre l'url:

http://localhost/site/dire/Bonjour%20tout%20le%20Monde
ou
http://localhost/site/dire/Bonjour%20tout%20le%20Monde?format=html

Ce qui devrait me renvoyé "Bonjour tout le monde" avec un

Code:

jQuery("madiv").load("./dire/Bonjour%20tout%20le%20Monde?format=html ");

... par exemple.

alors que que si je crée ma route en utilisant directement les classes comme suit:

Code:

public function initRoutes(){
        $router = $this->_front->getRouter();

        $router->addRoute('mod', new Zend_Controller_Router_Route(':module/:controller/:action/*'));
        
        $route = new Zend_Controller_Router_Route_Regex(
            'dire(?:/(.+))?',
            array(
            'message'     => 'Bonjour',
                'controller' => 'index',
                'action' => 'index'
            ),
            array(
                1 => 'message'
            ),
                    "dire/%s"
        );
        $router->addRoute('dire',$route);

        $this->_front->setRouter($router);
    }

Cela fonctionne parfaitement.

Vous allez surement me dire "pourquoi ne pas utilisé la méthode par classe?", en faite je veux rendre mon plugins indépendant et centralisé toute la configuration de celui-ci dans un fichier INI, ainsi je n'ai plus à toucher au code de mon plugin, mais juste à modifier mon fichier INI.

Voilà j'espère m'avoir bien fait comprendre.

J'espère que quelqu'un pourra m'aidé ou m'éclairé.

Dernière modification par blackstones (18-12-2009 04:25:28)


MacBook Intel Core 2 Duo 2,4 Ghz 4 Go de RAM
MAC OS X Powerfully and Usefully System for you.

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