Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Ne connaissant pas très bien zend framework, j'essaye de mettre en place un système de routes via un fichier .ini.
En voici une partie, en sachant que le reste et du même acabit :
routes.donjons.type = "Zend_Controller_Router_Route"
routes.donjons.route = "donjons.html"
routes.donjons.defaults.module = "Core"
routes.donjons.defaults.controller = "donjons"
routes.donjons.defaults.action = "index"
Voilà, comment s'initialise mon router dans le bootstrap de mon module Core :
protected function _initRouter()
{
$routeConfig = new Zend_Config_Ini(
ROOT_PATH . DIRECTORY_SEPARATOR .
'application' . DIRECTORY_SEPARATOR .
'Core' . DIRECTORY_SEPARATOR .
'configs' . DIRECTORY_SEPARATOR .
'routes.ini', APPLICATION_ENV
);
Zend_Controller_Front::getInstance()
->getRouter()
->addConfig($routeConfig, 'routes');
}
L'URL-rewritting est activé via un fichier .htaccess :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ index.php [L]
Si je me trompe pas, en appelant la page, si je fais monsite.com/donjons.html ou monsite.com/donjons/index, çà devrait l'afficher ? Dans mon cas, j'obtiens une erreur :
Not Found
The requested URL /public/donjons.html was not found on this server.
ou
Not Found
The requested URL /TNA/index.php was not found on this server.
Merci d'avance pour votre aide
Hors ligne
NicoC a écrit:
Ne connaissant pas très bien zend framework
Passe directement à ZF2 si tu débutes.
Hors ligne
Cà c'est prévu quand j'aurais une meilleure connaissance de zf1.
Mon travail est sur zf1, je vais pas leur demander de tout changer pour passer à zf2, sachant qu'il y a pas mal de choses de déjà faites.
Hors ligne
Bonjour,
Vois plutôt du côté du regex et du reverse:
[lang=ini] routes.list.type = "Zend_Controller_Router_Route_Regex" routes.list.route = "list(?:-(\d+))?(?:-(\d+))?\.html" routes.list.defaults.module = "default" routes.list.defaults.controller = "catalog" routes.list.defaults.action = "list" routes.list.defaults.page = null routes.list.map.1 = "id" routes.list.map.2 = "page" routes.list.reverse = "list-%d-%d.html"
Vu ici: http://www.z-f.fr/forum/viewtopic.php?id=2869
ou plutôt du côte des routes static:
[lang=php] $fc = Zend_Controller_Front::getInstance(); $router = $fc->getRouter(); $router->addRoute('machin.html', new Zend_Controller_Router_Route_Static(array( 'module'=>'TON_MODULE', 'controller'=> 'TON_CONTROLEUR', 'action'=> 'TON_ACTION' )));
Dernière modification par ptitjib (03-11-2012 15:35:51)
Hors ligne
Bonjour,
Je viens de tester ton code de routes static, mais j'obtiens une erreur sur un trim().
Message : expects parameter 1 to be string, array given
Perso, j'ai rajouté aucun trim dans toutes l'application.
Voici le code que j'ai utilisé :
$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();
$router->addRoute('donjons.html', new Zend_Controller_Router_Route_Static(array(
'module'=>'Core',
'controller'=> 'Donjons',
'action'=> 'index'
)));
J'ai testé un autre code que j'ai trouvé sur un autre forum, celui-ci ne provoque pas d'erreur avec trim mais quand je clic sur mon lien, toujours cette erreur : Not Found The requested URL /public/members (ou /members) was not found on this server.
$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();
$route = new Zend_Controller_Router_Route('donjons', array('module' => 'Core', 'controller' => 'Donjons', 'action' => 'index'));
$router->addRoute('donjons', $route);
En ce qui concerne le routes via le fichier .ini, j'ai rien testé d'autres pour le moment. Par contre, je vois pas ce que çà peut changer le fait d'utiliser des regex.
Ma route étant en dur pour chaque page ex : routes.home.route = "index.html" ou routes.donjons.route = "donjons.html".
Je continue à chercher
Hors ligne
NicoC a écrit:
Bonjour à tous,
Ne connaissant pas très bien zend framework, j'essaye de mettre en place un système de routes via un fichier .ini.
En voici une partie, en sachant que le reste et du même acabit :routes.donjons.type = "Zend_Controller_Router_Route"
routes.donjons.route = "donjons.html"
routes.donjons.defaults.module = "Core"
routes.donjons.defaults.controller = "donjons"
routes.donjons.defaults.action = "index"Voilà, comment s'initialise mon router dans le bootstrap de mon module Core :
protected function _initRouter()
{
$routeConfig = new Zend_Config_Ini(
ROOT_PATH . DIRECTORY_SEPARATOR .
'application' . DIRECTORY_SEPARATOR .
'Core' . DIRECTORY_SEPARATOR .
'configs' . DIRECTORY_SEPARATOR .
'routes.ini', APPLICATION_ENV
);
Zend_Controller_Front::getInstance()
->getRouter()
->addConfig($routeConfig, 'routes');
}L'URL-rewritting est activé via un fichier .htaccess :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ index.php [L]Si je me trompe pas, en appelant la page, si je fais monsite.com/donjons.html ou monsite.com/donjons/index, çà devrait l'afficher ? Dans mon cas, j'obtiens une erreur :
Not Found
The requested URL /public/donjons.html was not found on this server.ou
Not Found
The requested URL /TNA/index.php was not found on this server.Merci d'avance pour votre aide
bonjour,
ta route configurée dans le fichier routes.ini est bonne. le fichier routes.ini est-il chargé?
autre problème: t'as pas configuré de vhost donc aucun vhost ne pointe sur le répertoire public de ton projet
si t'as pas encore de vhost configuré tu peux tester ta route comme ça:
monsite.com/public/index.php/donjons.html
Hors ligne
NicoC a écrit:
Bonjour,
J'ai testé un autre code que j'ai trouvé sur un autre forum, celui-ci ne provoque pas d'erreur avec trim mais quand je clic sur mon lien, toujours cette erreur : Not Found The requested URL /public/members (ou /members) was not found on this server.$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();
$route = new Zend_Controller_Router_Route('donjons', array('module' => 'Core', 'controller' => 'Donjons', 'action' => 'index'));
$router->addRoute('donjons', $route);Je continue à chercher
cette route est aussi bonne le seul problème c'est qu'il n y a pas de vhost qui pointe sur le public de ton projet.comme t'as pas de vhost tu peux tester la route comme ceci(c'est pas géniale mais c'est juste pour des testes):
mondomaine.com/public/index.php/donjons
Dernière modification par amiss (06-11-2012 14:08:11)
Hors ligne
Si si, j'ai bien un vhost :
<VirtualHost 127.0.0.1:8080>
ServerAdmin .....@.......fr
ServerName................../TNA
DocumentRoot /home/kcin/www/TNA/public
<Directory /home/kcin/www/TNA/public>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
SetEnv APPLICATION_ENV development
#SetEnv APPLICATION_ENV production
</IfModule>
</Directory>
AddDefaultCharset UTF-8
#ErrorLog ${APACHE_LOG_DIR}/error-TNA.log
LogLevel warn
#CustomLog ${APACHE_LOG_DIR}/access-TNA.log combined
</VirtualHost>
Je viens de faire un var_dump de mon objet router, et je vois bien apparaître les différents éléments du fichier .ini. Donc côté chargement, çà doit être correct.
Mais est il vraiment pris en compte >.> Car je sais que je n'arrive pas à avoir la variable APPLICATION_ENV a development, donc doit y avoir un soucis dans ce vhost....
Dernière modification par NicoC (06-11-2012 14:23:29)
Hors ligne
Et quand je fais cette URL : http://kcin.testing-ground.lorbac.net/T … hp/members , çà m'affiche bien le contenu de la page...
Dernière modification par NicoC (06-11-2012 18:12:17)
Hors ligne
Donc en fait,ce que j'aimerais c'est pouvoir avoir une URL de ce style :
http://nom-de-domaine/public/donjons.html
En gros, ne plus avoir index.php entre public et le .html
Merci.
Hors ligne