Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je rencontre un souci avec le ZF (1.12.3). Lorsque je vais à l'adresse http://monsite/ je suis bien dans mon IndexController.
Par contre si je vais à http://monsite/plop (PlopController existe), je tombe sur une page 404.
Je ne sais pas d'où ça vient : ZF ? config Apache ?
Merci pour votre aide.
Dernière modification par 17795 (09-04-2014 10:49:32)
Hors ligne
Bonjour,
Je cherche toujours une solution à ce problème, merci pour votre aide
Hors ligne
Salut, as-tu bien renseigné ton fichier .htaccess ?
Hors ligne
Voici le contenu du .htaccess :
### surcharge du vhost SetEnv APPLICATION_ENV production SetEnv OPERATING_SYSTEM linux ErrorDocument 404 /error RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] # Vidéos AddType video/ogg .ogv AddType video/mp4 .mp4 AddType video/webm .webm
Hors ligne
Ok et la route existe bien ?
Hors ligne
Je ne comprends pas la question...
Hors ligne
Tu as bien déclaré la route pour attendre /plop ? Si tu ne comprends toujours pas, faut lire la doc
Hors ligne
Je pensais que c'est le framework qui gérait cela, je ne pensais pas que c'était une config manuelle.
Le quickstart de la doc n'évoque pas ce sujet, pourtant en tapant http://monurl/guestbook, on atterrit bien dans le GuestbookController.
Hors ligne
Si je comprends bien la doc, les directives de mon .htaccess suffisent à rediriger l'URI définie (la partie après l'URL de base) vers index.php, or dans mon cas je ne passe pas dans ce fichier (j'ai mis un echo 'plop'; die; en ligne 2)...
Hors ligne
Petit up, pour essayer de comprendre (et après avoir lu la doc..)
Hors ligne
Salut, évites de triple poste, tu peux éditer ...
Bref je t'encourage à relire la doc, effectivement le .htaccess redirige tout vers le point d'entrée qui est index.php et ensuite le router du ZF prend le relais. Tu dois donc définir une route qui pointe vers ton contrôleur, il peut pas le deviner tout seul
Hors ligne
Pourtant pour le guestbook, il le devine, car il n'y a ni fonction de routing définie dans le bootstrap, ni fichier de config routes.ini...
Et si je crée un TestController, avec un echo 'coucou'; die; dans le indexAction(), et que je tape l'adresse http://monurl/test, j'ai bien le coucou qui s'affiche. Pourtant je n'ai pas créé de route qui s'appelle test !
Dans ce cas j'ai bien dans la requête HTTP le pathInfo qui vaut /test, et le _controller qui est égal à test, et ça c'est bien le ZF qui le gère, pas moi.
Dernière modification par 17795 (09-04-2014 11:01:29)
Hors ligne
Oui tu es sur les routes automatiques via regexp alors (ça fait longtemps que j'ai pas fait de ZF1). Donc d'après ce que tu me dis pour que ça fonction il te faut une methode indexAction dans ton contrôleur PlopController pour que la route plop fonctionne. Si ton action s'appelle plopAction alors l'url pour y accéder doit être /plop/plop. Si ça ne fonctionne pas c'est ton contrôleur qui a un problème.
Hors ligne
Oui c'est bien ça, du moins dans le quickstart ça fonctionne ainsi.
Or sur mon projet, je n'ai pas ce résultat, je ne passe même pas dans le index.php, forcément ça ne route pas. Et je ne sais pas pourquoi, c'est là que je coince. Définir une route à la main ne servira à rien puisque le frontController n'est pas chargé.
Hors ligne
si http://monsite/ renvoie bien IndexControleur , donc le contrôleur par défaut, et tout autre contrôleur renvoie vers 404 cela laisse penser que le répertoire public n'est pas la racine de ton projet c-a-d que le directive DocumentRoot d'apache(de ton vhost) ne pointe pas vers public.
Dans ton cas pour accéder au contrôleur PlopController tu bien obliger de faire:
http://monsite/public/index.php/plob
Pour corriger cela il faut bien que ton vhost pointe vers public
Dernière modification par amiss (11-04-2014 12:12:03)
Hors ligne
Voilà mon vhost :
<VirtualHost *:80> DocumentRoot "C:\wamp\www\monsite\public" ServerName monsite.dev ServerAlias monsite.dev ErrorLog "logs/monsite-error.log" CustomLog "logs/monsite-error.log" common SetEnv APPLICATION_ENV development <Directory "C:\wamp\www\monsite\public"> Options Indexes Multiviews FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
http://monsite/public/index.php/plop me renvoie aussi une 404.
Hors ligne
http://monsite/public/index.php/plop me renvoie aussi une 404.
je suppose que dans PlopController t'as une action indexAction?
sinon essaie de poster l'arborescence de ton projet ainsi que la classe PlopController
Dernière modification par amiss (11-04-2014 13:19:24)
Hors ligne
Ma classe PlopController :
<?php class PlopController extends Zend_Controller_Action { public function init() { echo 'PlopController init()'; die; } // end init() public function indexAction() { echo 'PlopController indexAction()'; die; } // end indexAction() } // end class
Il n'y a encore rien dedans puisque je ne l'atteind pas.
L'arbo du projet :
_1SQL
_application
___configs
_____application.ini
___controllers
_____ErrorController.php
_____IndexController.php
_____PlopController.php
___layouts
_____scripts
_______layout.phtml
___models
___views
_____scripts
_______index
_________index.phtml
_______plop
_________plop.phtml
___Bootstrap.php
_library
___Zend
_public
___css
_____...
___js
_____...
___media
_____... (images,...)
___.htaccess
___robots.txt
Dernière modification par 17795 (11-04-2014 13:46:41)
Hors ligne
il faut mettre ton projet en environnement de développement pour pouvoir afficher l'erreur car 404 peut être lié à htaccess, à des espaces sur le nom du fichier PopControleur.. .pour ce faire dans ton fichier htaccess APPLICATION_ENV doit être à "development" (inutile d'en définir dans ton vhost):
#htaccess SetEnv APPLICATION_ENV "development"
Postes aussi les logs de ton serveur apache.
Dernière modification par amiss (11-04-2014 15:44:08)
Hors ligne
S'il est déjà dans le vhost ça ne sert à rien de le mettre dans le .htaccess
Hors ligne
La directive est mise à development, je n'ai pas d'erreur particulière qui s'affiche, à part "not found".
Elle est redéclarée pour ne pas oublier de la changer sur la prod (l'avoir deux fois est inutile mais je ne pense pas que cela provoque cette erreur).
Logs Apache :
127.0.0.1 - - [11/Apr/2014:16:44:47 +0200] "GET / HTTP/1.1" 200 4000
127.0.0.1 - - [11/Apr/2014:16:44:50 +0200] "GET /plop HTTP/1.1" 404 204
La 1e ligne est en status 200, c'est la page d'index qui s'affiche bien.
Je n'ai rien de plus en allant sur la page /plop
Hors ligne