Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous
Je recherche à utiliser un plugin pour redefinir le dossier de layout pour chaque module.
le plugin (application/commonsPlugins/setModularLayoutPlugin.php):
[lang=php] class setModularLayoutPlugin extends Zend_Controller_Plugin_Abstract { /** * Chargement de la configuration des layouts suivant le modules * appelé en surchargent la methode routeShutdown * * @name routeShutdown * @access public * @param object $request object request du front controlleur */ public function routeShutdown(Zend_Controller_Request_Abstract $request) { // on recupere le module cible de l'objet request $module = $request->getModuleName(); // on definit les options par defaut de layout pour le module appelé $layout_options = array( 'layout' => 'DefaultLayout', 'layoutPath' => 'application/modules/'.$module.'/layouts/', 'contentKey' => 'content' ); // on lance le MVC et on definit le typage $layout = Zend_Layout::startMvc($layout_options); $layout->getInflector()->setTarget(':script.:suffix') ->setStaticRule('suffix', 'phtml'); } }
voilà mon index.php
[lang=php] <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH), realpath(APPLICATION_PATH . '/../commonsPlugins/'), //ici mon inclusion du path des plugins realpath(APPLICATION_PATH . '/modules/default/models/'), realpath(APPLICATION_PATH . '/modules/default/plugins/'), realpath(APPLICATION_PATH . '/modules/default/forms/'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Et mon appel au plugin dans le bootstrap
[lang=php] /* * instanciation et paramètrage de Zend_Controller_Front (singleton de contrôleur frontale) * * @name _initControllerFront * @access public * @return object Zend_Controller_Front object */ protected function _initControllerFront() { self::$frontController = Zend_Controller_Front::getInstance(); self::$frontController->setBaseUrl('/'); self::$frontController->registerPlugin(new setModularLayoutPlugin()); }
J'ai l'erreur suivante:
Fatal error: Class 'setModularLayoutPlugin' not found in C:\wamp\www\at-home-media-cli\application\Bootstrap.php on line 150
Est je oublié quelque chose ?
Merci d'avance
Dernière modification par BeRoots (03-04-2012 13:51:41)
Hors ligne
Bonjour,
As-tu essayé de remplacer:
[lang=php]realpath(APPLICATION_PATH . '/../commonsPlugins/')
par
[lang=php]realpath(APPLICATION_PATH . '/commonsPlugins/')
??
Dernière modification par Roromix (29-03-2012 09:53:58)
Hors ligne
Bon, j'étais un peu HS et je n'ai pas mis le bon index.php :p
Je corrige donc:
[lang=php] <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/commonsPlugins'), realpath(APPLICATION_PATH . '/modules/default/models'), realpath(APPLICATION_PATH . '/modules/default/plugins'), realpath(APPLICATION_PATH . '/modules/default/forms'), get_include_path(), ))); echo get_include_path(); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
J'ai toujours la même erreur:
Fatal error: Class 'setModularLayoutPlugin' not found in C:\wamp\www\monsitezf\application\Bootstrap.php on line 150
fonction ---> Bootstrap->_initControllerFront( )
Voici un echo de get_include_path():
C:\wamp\www\monsitezf\library;C:\wamp\www\monsitezf\application\commonsPlugins;C:\wamp\www\monsitezf\application\modules\Default\models;;;.;C:\php\pear
Si quelqu'un a une idée?
Dernière modification par BeRoots (29-03-2012 16:30:56)
Hors ligne
Vraiment personne n'a une idée?
Je n'est pour l'heure qu'une application faite comme suis:
[lang=shell] zf create project monprojet zf enable layout zf create module monblog
apres vous avez tout ce qui faut entre le index.php à la racine corrigé si dessus et le reste en premier post...
C'est encore du par defaut comme utilisation et donc le dossier du plugin de chargement de path pour les layout suivant le path vers le dossier de module appelé. donc /appliction/commonsPlugins/
Moi je voit pas où si ce n'est le index.php où ce fait l'inclusion via set_include_path() mais pourtant le chemin est correct ???
Si quelqu'un à une idée... Merci d'avance
Hors ligne
Bien... Le problème était du coté de l'autoloader en fin de compte.... Je n'avais pas déclarer d'espace de nommage...
Encore Merci
Hors ligne