Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je suis débutant sur le Zend Framework, d'où quelques interrogations et incompréhensions, sur des problemes pourtant vraiment basics.
J'ai actuellement un probleme qui me semble insoluble : j'ai beau ajouter des routes dans le routeurs, faire les bonnes fonctions dans les bons controlleurs et appeler les bonnes vues (du moins je le pense), j'ai invariablement une erreur 404... Sauf pour la page d'accueil qui marche très bien... mais pas quand on tape l'adresse http://localhost/mondomaine/index/index.
Je suis partie pour moitié sur le tutoriel proposé par KitPages, et pour une autre moité sur la doc Zend Framework. L'architecture de l'appli est celle présentée par Kitpages
Voici mon fichier bootstrap (index.php, à la racine du site):
<?php define("WEBAPP_DIR","C:/Documents and Settings/Manu/Mes documents/Travail/101dreamz/_DEV"); define("MODEL_DIR",WEBAPP_DIR."/PHP-INF"); define("ROOT_URL","http://localhost/101dreamz/"); define("BASE_URL","/101dreamz/"); define("ZEND_FRAMEWORK_DIR","C:/Documents and Settings/Manu/Mes documents/Travail/101dreamz/_DEV/ZEND_FRAMEWORK/library"); define("DB_SERVER","localhost"); define("DB_PORT","3306"); define("DB_NAME","101dreamz"); define("DB_USER","root"); define("DB_PASSWORD",""); define("DB_TYPE","PDO_MYSQL"); set_include_path( ".".PATH_SEPARATOR. MODEL_DIR.PATH_SEPARATOR. ZEND_FRAMEWORK_DIR.PATH_SEPARATOR. get_include_path() ); require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('C:/Documents and Settings/Manu/Mes documents/Travail/101dreamz/_DEV/PHP-INF/ctrl'); $controller = Zend_Controller_Front::getInstance(); $controller->setBaseUrl(BASE_URL); // Router Zend_Loader::loadClass('Zend_Controller_Router_Rewrite'); $router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route( 'test/display', array( 'controller' => 'test', 'action' => 'display' ) ); $router->addRoute('test', $route); ?>
Comme on peut le voir, j'instancie un routeur, et je crée une nouvelle route, dont le chemin sera test/display et qui doit appeler un controller TestController.php ainsi que sa function 'action' displayAction(). Le tout associé à une vue qui se trouve sous PHP-INF\views\scripts\test et s'appelant display.phtml
Voici le code du controlleur
<?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class TestController extends Zend_Controller_Action { public function displayAction() { //On ne fait rien, c'est just un test } } ?>
voici celui de la vue
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Erreur</title> </head> <body> <h1>Erreur apparue</h1> <p>Une erreur est apparue ; veuillez rééssayer plus tard.</p> </body> </html>
Et voici mon .htacces a la racine
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
J'utilise la RC3 de la version.
J'ai retourné le probleme dans tout les sens, et je ne vois absolument pas ce qui provoque une 404 quand je fais http://localhost/mondomaine/test/display
Merci de votre aide
Dernière modification par scott (28-06-2007 05:47:30)
Hors ligne
Bonjour,
peux-tu décrire l'arborescence sur le disque ? genre :
/application/
/modules/
/default/
/controllers/
/models/
/views/
/foo/
/controllers/
/models/
/views/
/bar/
/controllers/
/models/
/views/
A+
fred
Hors ligne
Il y a un problème dans ta réécriture apache. Si elle marchait bien tu ne pourrais pas avoir de 404 (sauf pour des fichiers en .js, .ico, .gif,...).
Ca n'a pas encore de lien avec les routes que tu définis, tu devrais au moins être redirigé vers le framework.
Il faut trouver une raison pour laquelle ton .htaccess n'est pas pris en compte.
- est-ce qu'il est lisible ?
- est-ce qu'il est au bon endroit ?
- est-ce que le nom est bon ?
- Est-ce que tu peux regarder dans ton httpd.conf si tu as un "AllowOverride All" qui te permet d'écraser n'importe quelle conf avec un .htaccess ?
A+, Philippe
Hors ligne
Bonjour, et merci d'avoir répondu rapidement!
Pour Fred : mon arbo est de ce type ->
/ZENDFRAMEWORK (au meme niveau pour l'instant)
/PHP-INF/
/ctrl/
IndexController.php
TestController.php
/models/
/views/
/filters/
/helpers/
/scripts/
/index/
index.phtml
/test/
display.phtml
index.php
.htaccess
Pour Philippe : je pensais aussi a un probleme de htaccess. Mais alors dans ce cas la pourquoi la page d'index marche impecablement?
Pour répondre a tes questions :
- est-ce qu'il est lisible ? -> oui je pense. Tout dépend ce qu'on entend par lisible.
- est-ce qu'il est au bon endroit ? comme tu peux le voir sur l'arbo, il est à la racine du site
- est-ce que le nom est bon ? -> bien que faisant tourner ca sur un windows avec Xampp, le.htacces semble bon
- Est-ce que tu peux regarder dans ton httpd.conf si tu as un "AllowOverride All" qui te permet d'écraser n'importe quelle conf avec un .htaccess ? -> C'Est le cas : AllowOverride est bien a All
Je continue de regarder de mon coté. c'est forcément un truc tout con.... Merci encore de votre coup de main
Dernière modification par scott (28-06-2007 12:51:09)
Hors ligne
Je peux expliquer que la page d'index marche :
Si tu regardes l'URL : http://localhost/mondomaine/, tu tombes sur un répertoire. Apache regarde si il y a un fichier index.php dedans et donc il lance bien index.php, le framework est donc lancé et fonctionne normalement.
C'est un directive du httpd.conf qui explique qu'il va bien chercher le index.php à l'intérieur d'un répertoire. Un truc du genre :
DirectoryIndex index.php
Par contre le pourquoi ça ne marche pas pour les autres réécritures, je ne vois pas trop...
Est-ce que tu as bien activé le mod_rewrite dans ton apache ?
Sinon est-ce que tu peux essayer de configurer ton site directement dans la conf apache (httpd.conf) et pas dans le .htaccess ?
Ca donnerait quelque chose du genre :
<Location /mondomaine> RewriteEngine on RewriteBase /mondomaine RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /mondomaine/index.php [L] </Location>
A+, Philippe
PS : Fred, si t'as une idée... perso, moi je vois pas trop où ça peut foirer...
Hors ligne
Merci Philippe et Fred.
J'ai résolu le probleme. en fait il y en avait deux.
Le premier, j'ai un peu honte.... Etant habitué à bosser sous Linux, je ne fais plus trop attention à la syntaxe du nom de fichier .htaccess. Pour moi ils sont 'naturellement' sous la forme .htaccess. La, sous un systeme windows, un petit malin l'avais renommé ht.access... Voila, j'avais pas fait gaffe tellement c'était naturel...
Le second probleme etait dans le fichier .htaccess lui même.
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
n'a pas l'air de fonctionner (erreur 400). J'ai donc remplacé ça par le morceau de code que tu m'as donné, directement dans le fichier .htaccess (et non pas dans l'httpd.conf de apache comme tu le preconisais).
Et la tout est bon.
A un moment j'ai eu peur de devoir repasser à mon framework homemade
Merci encore. Ca m'a appris (une nouvelle fois....) que les trucs les plus cons sont souvent les plus emmerdant à trouver.
Hors ligne
scott a écrit:
Le premier, j'ai un peu honte.... Etant habitué à bosser sous Linux, je ne fais plus trop attention à la syntaxe du nom de fichier .htaccess. Pour moi ils sont 'naturellement' sous la forme .htaccess. La, sous un systeme windows, un petit malin l'avais renommé ht.access... Voila, j'avais pas fait gaffe tellement c'était naturel...
Merci encore. Ca m'a appris (une nouvelle fois....) que les trucs les plus cons sont souvent les plus emmerdant à trouver.
Enfin il n'y a pas de quoi avoir honte, quand même : comme tu dis, c'est ce genre de trucs qui font perdre le plus de temps... Le plus dur, c'est d'aller expliquer ça à ton patron : "salut chef, désolé je suis en retard pour mon projet, j'ai mis 5 heures à renommer un fichier ".
Hors ligne
haltabush a écrit:
scott a écrit:
Le premier, j'ai un peu honte.... Etant habitué à bosser sous Linux, je ne fais plus trop attention à la syntaxe du nom de fichier .htaccess. Pour moi ils sont 'naturellement' sous la forme .htaccess. La, sous un systeme windows, un petit malin l'avais renommé ht.access... Voila, j'avais pas fait gaffe tellement c'était naturel...
Merci encore. Ca m'a appris (une nouvelle fois....) que les trucs les plus cons sont souvent les plus emmerdant à trouver.
![]()
Enfin il n'y a pas de quoi avoir honte, quand même : comme tu dis, c'est ce genre de trucs qui font perdre le plus de temps... Le plus dur, c'est d'aller expliquer ça à ton patron : "salut chef, désolé je suis en retard pour mon projet, j'ai mis 5 heures à renommer un fichier".
Effectivement
mais j'ai réglé aussi le problème en devenant moi même le patron sur ce projet : je me suis pas viré pour cette fois, mais pas loin
Hors ligne
Allo,
Je voulais juste ajouter ma propre expérience. J'ai lu la présente discussion mais cela ne n'a pas aidé mon propre problème.
En fait dans mon cas, j'avais un VirtualHost par défaut pour mon répertoire et c'est dans celui là que l'AllowOveride était à None. Donc, même si je m'était AllowOverride à All dans mon apache2.conf celui du VirtualHost le désactivait
Soit en enlevant ce VirtualHost ou en le modifiant, le problème a été réglé
sauros
Hors ligne
bonjour tout le monde, je travail sur un projet avec zend dans une société où ça marche bien. j'ai copier le dossier at je l'ai mis au serveur wamp dans mon pc. mais j'obtient toujours l'erreur 500 INTERNAL SERVER ERROR .j'ai supprimer tout les fichier htaccess. maintenant je peux acceder seulement à la page index.
à part ça j'obtient ERROR NOT FOUND.
est ce qq peut m'aider sachant que j'ai modifier le httpconfig AllowOverride All mais ça marche tjr pas.
Merci
Hors ligne
erreur 500 signifie que ton serveur apache plante sur le traitement de la requête le .htaccess est foireux.
tu peux faire une copie de ton httpd.conf ajouter à la fin le contenu de ton .htaccess et utiliser en ligne de commande
apache -t copy_httpd.conf
apache va alors te dire si ta conf est OK
voici mon .htaccess
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php php_flag zend.ze1_compatibility_mode off php_flag magic_quotes_gpc off php_flag register_globals off
A+JYT
Hors ligne
Pages: 1