Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous.
Je débute sur ce framework qui a l'air pas mal du tout.
Cependant, je bloque pour l'instant sur un routage que je compte réalisé.
L'objectif etant de remplacer http://127.0.0.1/monsite/index/index/cat/3/
par http://127.0.0.1/monsite/categorie-3.html
simple me direz vous
malheureusement mon log, me dit :
exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (categorie-3.html)'
Voici mon code de routage:
$router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route_Regex( 'http://127.0.0.1/monsite/top-(\d+).html', array( 'module'=>'index', 'controller' => 'index', 'action' => 'index' ), array( 1=>'cat' ), 'top-%d.html' ); $router->addRoute('index', $route);
Je précise également mon .htaccess, qui se trouve au meme endroit que mon bootstrap.
RewriteEngine On RewriteBase /monsite RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Mon arborescence étant la suivante:
index.php
.htaccess
/application
/config
/controllers
/models
/views
/css
Merci pour votre aide .
Dernière modification par TomDlx (19-05-2009 16:06:09)
Hors ligne
Essaye avec ce code pour voir :
$router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route_Regex( 'monsite/top-(\d+).html', array( 'module'=>'default', // "default" normalement à moins que tu l'as remplacé, ou soit tu enlève cette ligne 'controller' => 'index', 'action' => 'index' ), array( 1=>'cat' ), 'top-%d.html' ); $router->addRoute('index', $route);
Hors ligne
merci pour ta réponse rapide, mais cette solution n'a pas l'air de fonctionné.
j'ai toujours Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (categorie-4.html)'
Hors ligne
D'ou sort "categorie" parce que dans la route il n'y figure pas.
Comment construis tu ton lien ? avec le helper $this->url() ?
Poste aussi ca.
Hors ligne
Autant pour moi, fais pas attention à 'categorie', c'est bien 'Invalid controller specified (top-4.html)'.
Sinon le lien, je le fais en dur du genre <a href="top-5.html">, je n'utilise pas le $this->url().
Hors ligne
Salut,
Ne donne pas le baseUrl dans la route.
Normalement le controller frontal le détectera tout seul, si ce n'est pas le cas, tu peux lui spécifier avec un:
$this->_front->setBaseUrl('monsite');
Ensuite ta route:
$router = $this->_front->getRouter(); $route = new Zend_Controller_Router_Route_Regex( 'top\-(\d+)\.html', array( 'module'=>'default', // "default" normalement à moins que tu l'as remplacé, ou soit tu enlève cette ligne 'controller' => 'index', 'action' => 'index' ), array( 1=>'cat' ), 'top-%d.html' ); $router->addRoute('index', $route);
A+ benjamin.
Dernière modification par Delprog (19-05-2009 16:50:11)
Hors ligne
ca ne marche toujours pas..
je trouve bizzare ce message d'erreur qui prend top-5.html pour un controlleur...
peut etre que le problème vient de ma configuration au niveau de apache ou de mon .htaccess ?
http://127.0.0.1/monsite/index/index/cat/1 marche nickel
mais alors, http://127.0.0.1/monsite/top-1.html, niet..
Hors ligne
Si tu as fait un copier-coller, cette route est correcte.
Quelles règles de ré-écritures utilises-tu pour Zend ?
Es-tu certain d'avoir bien ajouté la route au controlleur frontal ?
A+ benjamin.
Dernière modification par Delprog (19-05-2009 17:10:29)
Hors ligne
j'ai fait un copier/coller de ton code..
-qu'entends tu par règles de ré-écritures pour Zend ?
-
Es-tu certain d'avoir bien ajouté la route au controlleur frontal ?
le seul code qui est dans mon bootstrap et qui devrait gérer les routes est le code suivant (en reprenant le tien..):
$router = $frontController->getRouter(); $route = new Zend_Controller_Router_Route_Regex( 'top\-(\d+)\.html', array( 'module'=>'default', // "default" normalement à moins que tu l'as remplacé, ou soit tu enlève cette ligne 'controller' => 'index', 'action' => 'index' ), array( 1=>'cat' ), 'top-%d.html' ); $router->addRoute('index', $route);
Après, j'ai peut être oublier un element ..
help me
Hors ligne
Ton code est correct.
-qu'entends tu par règles de ré-écritures pour Zend ?
Je parle des RewriteRule(s) que tu devrais avoir dans ton fichier .htaccess ou dans la config de ton alias.
http://framework.zend.com/manual/fr/zen … go.rewrite
Et sinon, je ne pense pas que ça soit le problème, mais as-tu essayé de spécifier le baseUrl au controlleur frontal comme suggéré plus haut ?
A+ benjamin.
Dernière modification par Delprog (19-05-2009 17:27:56)
Hors ligne
help!!! svp..
bizarre quand même cette histoire..
même si je vide mon .htaccess, j'ai la même erreur.. j'ai l'impression qu'il ne soit pas pas executé..
autre chose à savoir qui peut être intéressant,
sur d'autre sites que j'ai réalisés (sans utiliser ZF), mes rewriterules sont de la forme
RewriteRule ^site-vente-privee/critiques-([^/]+)\.html$ http://127.0.0.1/AVP/index.php?page=fichesite&id=$1 [L]
je suis obligé de mettre http://127.0.0.1/AVP/ pour redirigé.
il semblerait que j'ai un problème de config..
Hors ligne
help me plz
Hors ligne
je vous donne mon bootstrap en integralité, si quelqu'un voit qu'il manque quelque chose ou qu'il y a un truc louche.. hésitez pas .. je ne trouve vraiment pas la solution.
<?php /* BOOTSTRAP , contrôleur frontal */ // définition de constantes pour l'application define('APP_MODE', 'dev'); // définition des chemins utiles $rootPath = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'monsite'; $appPath = $rootPath . DIRECTORY_SEPARATOR . 'application'; $confPath = $appPath . DIRECTORY_SEPARATOR . 'config'; // ********************* CONFIG ***************************** // configuration de l'include_path PHP pour l'autoload set_include_path(get_include_path() . PATH_SEPARATOR . $appPath . PATH_SEPARATOR . $rootPath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR . $appPath . DIRECTORY_SEPARATOR . 'models'); require_once 'Zend/loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true); // Récupération des objets de configuration $configMain = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'config.ini', APP_MODE); $configRoutes = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'routes.ini'); $configSession = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'session.ini', APP_MODE); // ************************** LOG ****************************** $log = new Zend_Log($writer = new Zend_Log_Writer_Stream($appPath . $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); //*************************************************************** // ************************** DATABASE ******************************* try { $db = Zend_Db::factory($configMain->database); $db->query("SET NAMES 'UTF8'"); $db->getConnection(); // Passage de la connexion à toutes les classes passerelles Zend_Db_Table_Abstract::setDefaultAdapter($db); Zend_Db_Table::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 } // activation du cache des méta données des passerelles Zend_Db_Table_Abstract::setDefaultMetadataCache($cacheInstance); // Appel du controleur frontal qui se charge de traiter la requete Zend_Controller_Front::run('./application/controllers'); // ********************* LOG ********************************* $writer = new Zend_Log_Writer_Stream($appPath . $configMain->logfile); $log = new Zend_Log($writer); // ************************ PAGINATEUR ********************************* Zend_View_Helper_PaginationControl::setDefaultViewPartial('common/pagination_control.phtml'); // ************************ contrôleur frontal ********************************* // Configuration du contrôleur frontal $frontController = Zend_Controller_Front::getInstance(); $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->setControllerDirectory($appPath . '/controllers'); $frontController->setBaseUrl('/monsite/'); $response = new Zend_Controller_Response_Http(); // $response->setRawHeader('Content-type: text/html; charset=utf-8'); // $frontController->setBaseUrl('http://127.0.0.1/monsite/'); // passage de la réponse configurée au système MVC $frontController->setResponse($response); // définition et ajout de routes contact // récupération du routeur $router = $frontController->getRouter(); $route = new Zend_Controller_Router_Route_Regex( '/top-(.+).html', array( 'module'=>'default', // "default" normalement à moins que tu l'as remplacé, ou soit tu enlève cette ligne 'controller' => 'Index', 'action' => 'Index' ), array( 1=>'cat' ), 'top-%d.html' ); $router->addRoute('routeCat', $route); Zend_Layout::startMvc( array('layoutPath' => $appPath . '/views/layouts' )); // ******************************** DISPATCH ****************************** try { $frontController->dispatch(); } catch (Zend_Exception $e) { $log->crit($e); } ?>
Que je mette les lignes qui ajoutes les routages ou pas , mon erreur est toujours la meme, Invalid Controller Specified.
Il ne prend absolument pas en compte l'url rewriting, pourtant bien activé.. (l'url rewriting marche sur mes applis qui tournent sans ZF).
Je compte sur votre aide merci d'avance.
Hors ligne
Salut,
Je ne sais pas si c'est ça mais tu dispatches 2 fois ton application dans ton bootstrap.
Zend_Controller_Front::run($controllerDirectory) dispatche automatiquement en interne.
Enlève cette partie de code:
// Appel du controleur frontal qui se charge de traiter la requete Zend_Controller_Front::run('./application/controllers');
A++
Hors ligne
merci blue Eyes. c'était çà qui n'allait pas...
A noter que dans l'expression regex, il faut enlever le slash dans l'expression '/top-(.+).html'
Encore merci à tous ceux qui m'ont aidé.
je vous aimes
Dernière modification par TomDlx (22-05-2009 16:50:09)
Hors ligne
Pages: 1