Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Après des recherches sur le net infructueuses, je m'en remets à vos connaissances.
Le problème est simple à poser
J'ai une application organisation suivant de la sorte :
/application
/modules
/frontend
/controller
/view
/backend
/controller
/view
Alors j'ai défini mon module par défaut dans mon bootstrap de la sorte :
protected function _initRoutes() { $routeur = Zend_Controller_Front::getInstance()->getRouter(); $routeur->addRoute('index', new Zend_Controller_Router_Route_Static('index', array( 'module' => 'frontend', 'controller' => 'index', 'action' =>'index')) ); }
Et je n'ai aucun problème à atteindre les pages de mon frontend grace à des url du type :
<?php echo $this->url(array('controller'=>'index','action'=>'index'));?>
Par contre, dès lors que j'essaie de changer de module, et de passer dans mon backend, grace à des url comme ceci
<?php echo $this->url(array('module'=>'backend', 'controller'=>'admin','action'=>'index'));?>
J'obtiens une adresse comme ça : public/backend/admin
Mais s'affiche la page d'index de l'application, qui se trouve dans le frontend, et non la page du backend réclamée.
Alors, j'ai essayé via des route etc ... mais je n'arrive pas à ce que je veux. A vrai dire j'arrive même à rien. J'imagine que ces routes sont la solution à mon problème, pouvez vous m'aidez à établir des liens corrects pour afficher les pages de mon module backend.
Cordialement
Dernière modification par Nertius (24-03-2011 08:15:04)
Hors ligne
J'ajoute que j'ai essayer de construire une route de la sorte :
$routeur->addRoute('backend', new Zend_Controller_Router_Route_Static('admin', array( 'module' => 'backend', 'controller' => 'admin', 'action' =>'index')) );
Mais l'adresse : public/admin me donne le même résultat, c'est l'index et donc le chemin par défaut du frontend qui s'affiche et non la page du backend demandée.
Hors ligne
Il faut utiliser Zend_Controller_Router_Route et non Zend_Controller_Router_Route_Static
Par ailleurs as tu bien configuré ton baseUrl ? (il semble que ça soit /public/ chez toi).
Si tu utilises Zend_Application, ça se configure dans application.ini.
Sinon c'est dans ton bootstrap avec une ligne du genre
$front->setBaseUrl('public');
A+, Philippe
Hors ligne
Merci de ta réponse
A vrai dire, je pensais que le basUrl était auto détecté.
J'ai changer le addRoute mais cela ne change rien.
Je mets pour info le code de mon index.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'), 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();
Celui de mon bootstrap (tt du moins les parties intéressantes)
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function run() { // Cela permet d'avoir la configuration disponible de partout dans notre application Zend_Registry::set('config', new Zend_Config($this->getOptions())); parent::run(); } protected function _initAutoload() { // On enregistre les modules (les parties de notre application), souvenez-vous : Backend et Frontend $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); $loader->addResourceType('validator', 'forms/validators', 'Validator'); $loader->addResourceType('acl', 'acls', 'Acl'); return $loader; } protected function _initView() { // Initialisation de la vue et des helpers de vue $view = new Zend_View(); $view->doctype('XHTML1_STRICT'); // On ajoute le dossier des helpers $view->addHelperPath(APPLICATION_PATH . '/views/helpers'); // On charge l'helper qui va se charger de la vue $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view); return $view; } protected function _initRoutes() { $routeur = Zend_Controller_Front::getInstance()->getRouter(); $routeur->addRoute('index', new Zend_Controller_Router_Route_Static('index', array( 'module' => 'frontend', 'controller' => 'index', 'action' =>'index')) ); $routeur->addRoute('backend', new Zend_Controller_Router_Route('admin', array( 'module' => 'backend', 'controller' => 'admin', 'action' =>'index')) ); } }
et Enfin celui de mon application.ini
[production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 phpSettings.date.timezone = "Europe/Paris" includePaths.library = LIBRARY_PATH bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" ; so auto-loading will find our classes in library/App autoloaderNamespaces[] = "App_" ; initialize database resources.db.adapter = "MYSQLI" resources.db.params.host = "*******" resources.db.params.username = "*****" resources.db.params.password = "****" resources.db.params.dbname = "****" resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss" resources.db.isDefaultTableAdapter = true ; initialize front controller resource resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.moduleControllerDirectoryName = "controllers" resources.frontController.defaultControllerName = "index" resources.frontController.defaultAction = "index" resources.frontController.defaultModule = "frontend" ; initialize layout resource resources.layout.layoutPath = APPLICATION_PATH "/layouts" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
Ca aiderait surement à me faire comprendre ce que justement je ne pige pas
Hors ligne
Si tu ajoutes ça dans ton application.ini, ça devrait tourner :
resources.frontController.baseUrl = "/public"
A+, Philippe
Hors ligne
Oh le con ^^, j'avais pas vu, mais c'est ma gestion d'acl qui m'amène à ce résultat ... hum ... j'men veux de pas l'avoir vu plus tôt.
J'dois maintenant trouver un moyen de gérer l'autorisation des modules au niveau de l'acl ...
Hors ligne
Pages: 1