Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-06-2008 10:07:03

Bab
Nouveau membre
Date d'inscription: 28-05-2008
Messages: 8

[1.5.x][Zend_Controller_Front] Front contrôleur perso totalement vide

Bonjour à tous! smile

Je suis actuellement sur un projet de site ou je souhaite étendre toutes les classes Zend que je suis amené à utiliser, dans le seul et unique but d'avoir une appli le plus souple possible où je pourrais, par la suite, redéfinir sans mal une des classes que j'aurai déclarée sans avoir aucune modification à effectuer dans le restant de l'appli.

Ceci passe bien entendu (et surtout), par la création d'une classe Viv_Controller_Front perso, qui étends Zend_Controller_Front.

Rendons dés à présent à César ce qui est à César, je n'ai rien inventé ou presque, mon Font Controleur et mon bootstrap s'inspirent très fortement des tutos de Sekaijin:
Bootstrap: http://sekaijin.ovh.org/?p=4
Front Controller: http://sekaijin.ovh.org/?p=10

Voici le code de mon bootstrap:

Code:

<?php
// Déplacement du dossier de stockage des sessions
ini_set('session.save_path', '../application/var/sessions');

// Modification de l'inclue path
set_include_path('.'.PATH_SEPARATOR.'../application/lib/'.PATH_SEPARATOR.'../application/usr/models/'.PATH_SEPARATOR.get_include_path());

require 'Viv/Loader.php';

// Permet de charger la configuration
Viv_Loader::loadClass('Viv_Config');
Viv_Config::load('../application/config/environment.ini');

// Lancement du Front Controller
Viv_Loader::loadClass('Viv_Controller_Front');
Viv_Controller_Front::run('../application/usr/controllers');

Et le code de mon Front Controller:

Code:

<?php
Viv_Loader::loadClass('Zend_Controller_Front');

class Viv_Controller_Front extends Zend_Controller_Front {
    
    // Permet de récupérer l'instance en cours du front controller
    public static function getInstance() {
        if (null === self::$_instance) {
            self::$_instance = new self(); // Singleton étendu du Zend_Controller_Front
        }
        return self::$_instance;
    }
    
    public static function run($controllerDirectory) {
        // Récupération de la configuration et des paramètres dans la Registry
        $config = Viv_Registry::getConfiguration();
        $parameters = Viv_Registry::getParameters();
        
        if($parameters && $config) {
            Viv_Loader::loadClass('Viv_Layout');
            Viv_Loader::loadClass('Viv_Session');
            
            Viv_Loader::loadClass('Viv_Db_Table_Abstract');
            // On vérifie que l'on dispose bien des informations de connexion à la BDD
            if (!$config->get($parameters->vivalur->db)) {
                Viv_Loader::loadClass('Viv_Exception_Db');
                throw new Viv_Exception_Db('No configuration found for database: '.$parameters->vivalur->db);
            }
            $params = $config->get($parameters->vivalur->db)->toArray();
            // On déclare la connexion à la BDD
            $dbAdapter = Zend_Db::factory($parameters->vivalur->db, $params);
            Viv_Db_Table_Abstract::setDefaultAdapter($dbAdapter); 
            Viv_Registry::set('dbAdapter', $dbAdapter);
            
            // Lancement de la session
            Viv_Session::start();
            
            // On regarde si l'authentification doit être mise en place
            $auth = $parameters->vivalur->get('auth', false);
            if($auth) {
                Viv_Loader::loadClass('Viv_Auth');
                Viv_Loader::loadClass('Viv_Acl');
                Viv_Loader::loadClass('Viv_Auth_Storage_Session');
                Viv_Loader::loadClass('Viv_Plugin_Acl');
                
                // Création de l'objet Auth
                $auth = Viv_Auth::getInstance();
                $auth->setStorage(new Viv_Auth_Storage_Session('user'));
                
                // Création de l'objet Acl
                $acl = new Viv_Acl($auth);
            }
            
            Viv_Loader::loadClass('Viv_Controller_Request_Http');
            Viv_Loader::loadClass('Viv_Controller_Dispatcher');
            
            // Déclaration du dispatcher
            $dispatcher = new Viv_Controller_Dispatcher();
            $dispatcher->setControllerDirectory($controllerDirectory);
            
            $request = new Viv_Controller_Request_Http();
            
            // Mise en place du layout
            $layout = Viv_Layout::startMVC($parameters->layout);
            
            // Paramétrage du front controller
            $controller = self::getInstance();
            $controller    ->setRequest('Viv_Controller_Request_Http') 
                                ->setDispatcher($dispatcher)
                                ->throwExceptions(true);
                                
            // Plugin permettant de gérer les ACL
            if($auth)
                $controller->registerPlugin(new Viv_Plugin_Acl($auth, $acl));
            
            // Dispatchage
            $controller->dispatch();
            
        } else {
            Zend_Controller_Front::run('../application/usr/controllers');
        }
    }
}

Comme je vous le disais, impossible de récupérer l'objet _request et pour cause voilà le résultat d'un print_r() de mon Front Controller (Identique dans un plgin ou dans un controller quelconque)

Code:

Viv_Controller_Front Object
(
    [_baseUrl:protected] => 
    [_controllerDir:protected] => 
    [_dispatcher:protected] => 
    [_invokeParams:protected] => Array
        (
        )

    [_moduleControllerDirectoryName:protected] => controllers
    [_plugins:protected] => Zend_Controller_Plugin_Broker Object
        (
            [_plugins:protected] => Array
                (
                )

            [_request:protected] => 
            [_response:protected] => 
        )

    [_request:protected] => 
    [_response:protected] => 
    [_returnResponse:protected] => 
    [_router:protected] => 
    [_throwExceptions:protected] => 
)

Hors ligne

 

#2 03-06-2008 13:48:37

Bab
Nouveau membre
Date d'inscription: 28-05-2008
Messages: 8

Re: [1.5.x][Zend_Controller_Front] Front contrôleur perso totalement vide

Un peu plus d'infos concernant mon problème.

Lorsque je fait un print_r() de mon Front Controller, au sein même de clui-ci, juste avant le dispatch(), toutes les infos sont correctes (et j'ai bien un objet request)

J'ai regardé un peu ce qui ce passait et lorsque je fait:

Viv_COntroller_Front::getInstance(), je récupère une nouvelle isntance de mon Front Controller (instance vide bien évidemment)

Bref, une fois le dispatch effectué, mon Viv_Controller_Front semble être détruit... :S

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