Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-05-2009 11:39:39

tomskab
Nouveau membre
Date d'inscription: 07-05-2009
Messages: 5

[resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

Bonjour,

J'expériente depuis peu le ZF.
J'ai commencé le développement d'une application sous le ZF 1.7.5, certaines nouveautés de la version 1.8.0 m'ont intéressés mais je me retrouve maintenant avec un souci pour mettre en place la 'Navigation' via le Boostrap (méthode _initNavigation).

Quelqu'un aurait-il déjà un petit retour d'expérience à ce sujet ?

Voici un extrait de mon Boostrap.php

Code:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
    protected function _initAutoload() {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath'  => APPLICATION_PATH,
        ));
        
        return $autoloader;
  }

    protected function _initFrontcontroller() {
        // Récupération d'une instance du controleur frontal (singleton)
        $frontController = Zend_Controller_Front::getInstance();

        // Définition du répertoire de modules
        $frontController->addModuleDirectory(APPLICATION_PATH . '/modules');
        $frontController->setDefaultModule('default');

        // Chargement des droits, ACL stockées dans un fichier INI
        $acl = new Plugin_Acl(APPLICATION_PATH . '/configs/acl.ini');

        // Enregistrement et activation des plugins
        $frontController->registerPlugin(new Plugin_Auth($acl));
        
        return $frontController;
    }    
    
    protected function _initView() {
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=iso-8859-1');
        $view->headLink()->prependStylesheet('/css/layout.css')
                                            ->appendStylesheet('/css/style.css');
        $view->headScript()->prependFile('/js/effects.js')
                                                ->prependFile('/js/scriptaculous.js')
                                                ->prependFile('/js/prototype.js');


        return $view;
    }

    protected function _initNavigation() {
        $this->bootstrap('View');
        $view = $this->getResource('View');

        // Gestion des 'pages'
        $pages = array(
            array(
                'label'      => 'Home',
                'title'      => 'Home',
                'module'     => 'default',
                'controller' => 'index',
                'action'     => 'index',
                'order'      => -100 // make sure home is the first page
            ),
            array(
                'label'                => 'Toto',
                'module'            => 'default',
                'controller'    => 'index',
                'action'            => 'index',
            ),
            array(
                'label'      => 'Tata',
                'module'     => 'default',
                'controller' => 'index',
                'action'     => 'index',
            ),
        );
        $container = new Zend_Navigation($pages);
        $view->getHelper('navigation')->setContainer($container);
                
        return $container;
    }
    
}

Dernière modification par tomskab (12-05-2009 10:06:57)

Hors ligne

 

#2 07-05-2009 13:49:48

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

C'est quoi ton problème ? Moi, je suis passé par le fichier ini. Tu trouveras l'extrait de mon fichier ini dans le poste [ZF 1.8] Premier test


----
Gruiiik !

Hors ligne

 

#3 07-05-2009 14:18:31

tomskab
Nouveau membre
Date d'inscription: 07-05-2009
Messages: 5

Re: [resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

Mon problème, est que lorsque j'effectue le rendu d'un élément 'Navigation' dans une vue et bien je n'obtiens rien !

Code:

// dans une vue
...
<?php echo $this->getHelper('navigation')->menu() ?>
...

J'ai également essayer de placer l'initialisation de la navigation dans le fichier de config application.ini mais je n'ai toujours aucun résultats, comme tu l'as indiqué, sans plus de réussite...

Mon conteneur Zend_Navigation ne contient jamais de pages: $this->getHelper('navigation')->hasPages() me renvoit False.

Je précise que si je place la définition de mes pages dans le fichier INI je comment la fonction _initNavigation() de la classe de Boostrap.

Hors ligne

 

#4 07-05-2009 14:55:51

tamildark
Membre
Date d'inscription: 09-04-2009
Messages: 26

Re: [resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

Bonjour,
pour initialiser la navigation dans la bootstrap, j'ai procédé ainsi:

Code:

// fichier Bootstrap.php
protected function _initNavigation() 
    {
        $this->bootstrap('layout');
        $layout=$this->getResource('layout');
        $view=$layout->getView();
        $container=new Zend_Navigation(array(
            array(
            'label'=>utf8_encode('page1'),
            'controller'=>'index',
            'action'=>'index',
            'title'=>'Acheter',
            'active'=>true
            ),
            array(
            'label'=>utf8_encode('page2'),
            'controller'=>'index',
            'action'=>'index',
            'title'=>'vendre',
            'active'=>true
            ),
            array(
            'label'=>utf8_encode('page3'),
            'controller'=>'index',
            'action'=>'index',
            'title'=>'Acheter',
            'active'=>true
            ),
            array(
            'label'=>utf8_encode('page4'),
            'controller'=>'index',
            'action'=>'index',
            'title'=>'Acheter',
            'active'=>true
            )
            
        ));
        $view->navigation($container);
    
    }

et dans le fichier layout il suffit de faire

Code:

<?php echo $this->navigation()->menu(); ?>

Dernière modification par tamildark (07-05-2009 14:58:01)

Hors ligne

 

#5 07-05-2009 15:10:03

tomskab
Nouveau membre
Date d'inscription: 07-05-2009
Messages: 5

Re: [resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

Effectivement, cela fonctionne, il semble qu'il faille donc récupérer la View depuis la ressource Layout, cela reste encore assez flou pour moi quand même...peut être une séquence d'initialisation.

En tout cas merci.

Hors ligne

 

#6 12-05-2009 17:44:48

phifeshaheed
Membre
Date d'inscription: 06-05-2009
Messages: 29

Re: [resolu][ZF 1.8.0] Bootstrap et Zend_Navigation

Bonjour je suis en train de démarer un projet sous zend 1.8 et aimerai avoir quelques précisions au sujet du nouveau process de bootstrap.

sous 1.7 mon boostrap index.php ressemblait au code qui suit, qu'est ce qui dans ce code passe dans le fichier bootstrap.php ?

Code:

<?php
// APPLICATION CONSTANTS - Set the constants to use in this application.
// These constants are accessible throughout the application, even in ini 
// files. We optionally set APPLICATION_PATH here in case our entry point 
// isn't index.php (e.g., if required from our test suite or a script).
defined('APPLICATION_PATH')
    or define('APPLICATION_PATH', dirname(__FILE__));

defined('APPLICATION_ENVIRONMENT')
    or define('APPLICATION_ENVIRONMENT', 'development');

set_include_path('.' .
                 PATH_SEPARATOR . APPLICATION_PATH . '/../library' . 
                 PATH_SEPARATOR . APPLICATION_PATH . '/models' . 
                 PATH_SEPARATOR . get_include_path());


// Utilisation de Zend_Loader
require_once "Zend/Loader.php";
// Chargement automatique des classes
Zend_Loader::registerAutoload();

// ******************** CACHE *******************************
define('CACHE_LIFETIME', 3600);
// création du cache pour les composants ZF l'acceptant
Ap2s_Cache::setup(CACHE_LIFETIME);
// cache automatique des fichiers de configuration
$cacheInstance = Ap2s_Cache::getCacheInstance();
Ap2s_Config::setBackendCache($cacheInstance->getBackend());


// ********************* CONFIG *****************************

// Récupération des objets de configuration
$confPath = APPLICATION_PATH . DIRECTORY_SEPARATOR. 'config';
$configMain       = new Ap2s_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'app.ini', APPLICATION_ENVIRONMENT);
$configRoutes  = new Ap2s_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'routes.ini');
$configSession = new Ap2s_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'session.ini', APPLICATION_ENVIRONMENT);


// ************************** LOG ******************************

$log = new Zend_Log($writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $configMain->logfile));

// Ajout de paramètres à enregistrer, adresse ip et navigateur
$log->setEventItem('user_agent',$_SERVER['HTTP_USER_AGENT']);
$log->setEventItem('client_ip',$_SERVER['REMOTE_ADDR']);

$log->addPriority('USER', 8);
// Ajout des paramètres enregistrés dans le format du journal à écrire
$format = '%client_ip% %user_agent%' . Zend_Log_Formatter_Simple::DEFAULT_FORMAT;

// Ajout du format du journal au log
$writer->setFormatter(new Zend_Log_Formatter_Simple($format));

Zend_Registry::set('log', $log);

// ************************* SESSION ***********************************

// Configuration de la session (impérativement avant son démarrage)
Zend_Session::setOptions($configSession->toArray());
Zend_Session::setOptions(array('save_path' => APPLICATION_PATH . $configSession->save_path));

// Partage (et création ou restauration) de l'objet de session dans le registre
// Ce premier appel à new Zend_Session_Namespace démarre la session PHP
Zend_Registry::set('session', $session = new Zend_Session_Namespace($configSession->name));

// ************************** LOCALE ********************************

// locale pour la gestion de la langue

//Zend_Locale::$compatibilityMode = false;
$locale = new Zend_Locale(); // locale par défaut : navigateur utilisé, sinon machine hôte
Zend_Registry::set('Zend_Locale', $locale);

// on attache le composant cache à Zend_Locale
Zend_Locale::setCache($cacheInstance);

// *************************** DATES *********************************
date_default_timezone_set('Europe/Paris');
Zend_Date::setOptions(array('cache' => $cacheInstance));

// ************************** DATABASE *******************************

try {
    $db = Zend_Db::factory($configMain->database);
    $db->query("SET NAMES 'UTF8'");
    
    // Passage de la connexion à toutes les classes passerelles
    Zend_Db_Table_Abstract::setDefaultAdapter($db);
} catch (Zend_Db_Exception $e) {
    // on passe l'exception sous silence, elle sera gérée dans le système MVC plus tard 
    unset($e);
}

// activation du cache des méta données des passerelles
Zend_Db_Table_Abstract::setDefaultMetadataCache($cacheInstance);

//************************** ACL *************************************

// les ACLs n'existent pas en session, créons les
// if (! isset($session->acl)) {
//       $acl = new Zend_Acl();
//       $acl->addRole(new Zend_Acl_Role('user'));
//       $acl->add(new Zend_Acl_Resource('reservations'));
//       $session->acl = $acl;
// }

// ************************ PAGINATEUR *********************************

// Zend_View_Helper_PaginationControl::setDefaultViewPartial('shared/pagination_control.phtml');

// ************************ MVC ****************************************

// Configuration du contrôleur frontal
$frontController = Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(APPLICATION_PATH . '/controllers');
$frontController->throwExceptions(false); // par défaut


// propagation de paramètres dans le système MVC
$frontController->setParam('debug',     $configMain->debug);
$frontController->setParam('locale', $locale);
$frontController->setParam('config', $configMain);
$frontController->setParam('env',     APPLICATION_ENVIRONMENT);

// enregistrement du plugin de sauvegarde de la page précédente
$frontController->registerPlugin(new Ap2s_Controller_Plugins_Session);

// Ajout du chemin des aides d'action dans le gestionnaire d'aides MVC
Zend_Controller_Action_HelperBroker::addPrefix('Ap2s_Controller_ActionHelpers');

// Configuration d'un en-tête de réponse HTTP global
$response = new Zend_Controller_Response_Http();
$response->setRawHeader('Content-type: text/html; charset=utf-8');

// passage de la réponse configurée au système MVC
$frontController->setResponse($response);

// récupération du routeur
$router = $frontController->getRouter();

// définition et ajout de routes contact
$router->addConfig($configRoutes->getConfigObject(), 'routes');

// **************************** LAYOUTS ***********************************

Zend_Layout::startMvc(array('layoutPath' => APPLICATION_PATH . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts'));

// ************************* TRANSLATE ************************************

//Zend_Translate::setCache($cacheInstance);

$translate = new Zend_Translate('gettext', APPLICATION_PATH . DIRECTORY_SEPARATOR . 'languages', null, array('scan' => Zend_Translate::LOCALE_FILENAME, 'disableNotices' => true));    

$langLocale = isset($session->lang) ? $session->lang : $locale;

// Passage de la locale en cours à Zend_Translate
$translate->setLocale($langLocale);
Zend_Registry::set('Zend_Translate', $translate);



// ************************* FORM ******************************************

// $french = array();
// $english = array();
// $translateForm = new Zend_Translate('array', $french, 'fr');
// $translateForm->getAdapter()->addTranslation($english ,'en');
// $translateForm->setLocale($langLocale);
// Zend_Form::setDefaultTranslator($translateForm);


// ************************* VIEW ******************************************

// $view = Zend_Layout::getMvcInstance()->getView();

$view = new Ap2s_View();
$view->doctype('XHTML1_STRICT');
$view->addHelperPath('Ap2s/View/Helper', 'Ap2s_View_Helper');
$view->setEncoding('UTF-8');
$view->strictVars((bool) $configMain->debug);

// Récupération de l'aide de rendu automatique de vues : viewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');

// Passage de notre vue à ViewRenderer
$viewRenderer->setView($view);

// Récupération de l'aide de rendu automatique de vues : viewRenderer
// Zend_Controller_Action_HelperBroker::addHelper(new Zend_Controller_Action_Helper_AjaxContext());

// CLEANUP - remove items from global scope
// This will clear all our local boostrap variables from the global scope of 
// this script (and any scripts that called bootstrap).     This will enforce 
// object retrieval through the Applications's Registry
unset(
    $confPath,
    $cacheInstance,
    $confPath,
    $configMain,
    $configRoutes,
    $configSession,
    $writer,
    $format,
    $session,
    $locale,
    $db,
    $frontController,
    $response,
    $router,
    $translate,
    $langLocale,
    $view,
    $viewRenderer
);

// ******************************** DISPATCH ******************************
try {
    Zend_Controller_Front::getInstance()->dispatch();
} catch (Zend_Exception $e) {
    $log->crit($e);
}

Dernière modification par phifeshaheed (12-05-2009 17:50:30)

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