Page 1 sur 2

[Symfony] 1.2 et les erreurs 404

Posté : 21 mars 2009, 10:52
par julian
Salut à tous !

Je suis entrain de réaliser le tutoriel Jobeet Doctrine pour me former à Symfony.
Tout fonctionne bien, sauf que j'ai pas les pages d'erreurs 404 qui devraient être affiché. A chaque fois, j'obtiens une erreur PHP "Uncaught exception". Par exemple, quand je tente d'accéder à un job dont l'id n'existe pas, il devrait m'envoyer un page 404. Au lieu de ça j'ai cette erreur
Fatal error: Uncaught exception 'sfError404Exception' with message 'Unable to find the Component : JobeetJob Table : jobeet_job
object with the following parameters "array ( 'company_slug' => 'extreme-sensio', 'location_slug' => 'paris-france', 'id' => '4', 'position_slug' => 'web-designer',)").'
in /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/routing/sfObjectRoute.class.php:111 Stack trace:
#0 /Applications/MAMP/htdocs/sfprojects/jobeet/apps/frontend/modules/job/actions/actions.class.php(24): sfObjectRoute->getObject()
#1 /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/action/sfActions.class.php(53): jobActions->executeShow(Object(sfWebRequest))
#2 /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php(90): sfActions->execute(Object(sfWebRequest))
#3 /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php(76): sfExecutionFilter->executeAction(Object(jobActions)
in /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/routing/sfObjectRoute.class.php on line 111
J'ai aussi ce type d'erreur quand je veux soumettre un formulaire en ne remplissant pas les champs obligatoire :
Fatal error: Uncaught Required. thrown in /Applications/MAMP/htdocs/sfprojects/jobeet/lib/vendor/symfony/lib/validator/sfValidatorBase.class.php on line 300
Ce que j'arrive pas à savoir, c'est si c'est un souci côté Symfony ou côté configuration PHP.
En mode "dev", j'ai ces erreur, et en mode "prod" j'ai une page blanche...

Merci d'avance

julian

Posté : 21 mars 2009, 11:16
par naholyr
Comment as-tu installé Symfony ?
Je dirais que c'est plutôt du côté du contrôleur Symfony que ça se passe, mais comme je n'ai jamais vu cette exception non cachée je ne vois que deux possibilités : une install corrompue ou basée sur une version de dév qui était buggée au moment où tu l'as prise, ou bien un contrôleur "custom" mais ça m'étonnerait que tu te sois amusé à ça vu que tu en es au stade des tutos ;)

Posté : 21 mars 2009, 11:19
par julian
En fait, j'ai suivi le tutoriel pour l'installation, donc je pense avoir bien fait...
Je vais essayer une nouvelle installation pour voir alors.
Je vous tiens au courant.

Merci bcp !

Edit :

Alors, j'ai re-télécharger la version 1.2.4 sur le site de symfony.
J'ai copié le répertoire extrait à l'intérieur du répertoire : htdocs/sfinstallation/jobeet/lib/vendor/
sfinstallation est un répertoire que j'ai créer uniquement pour cette installation.

Ensuite, j'ai suivi le tutoriel en exécutant les commandes suivantes.
En bleu mes lignes de commandes.

Vérification de la configuration
$ /Applications/MAMP/bin/php5/bin/php lib/vendor/symfony/data/bin/check_configuration.php
********************************
* *
* symfony requirements check *
* *
********************************

php.ini used by PHP: /Applications/MAMP/conf/php5/php.ini

** WARNING **
* The PHP CLI can use a different php.ini file
* than the one used with your web server.
* If this is the case, please launch this
* utility from your web server.
** WARNING **

** Mandatory requirements **

OK requires PHP >= 5.2.4
OK php.ini: requires zend.ze1_compatibility_mode set to off

** Optional checks **

OK PDO is installed
OK PDO has some drivers installed: sqlite2, sqlite, pgsql, mysql
OK PHP-XML module installed
OK XSL module installed
OK can use token_get_all()
OK can use mb_strlen()
OK can use iconv()
OK can use utf8_decode()
[[WARNING]] has a PHP accelerator
*** Install a PHP accelerator like APC (highly recommended) ***
[[WARNING]] php.ini: short_open_tag set to off
*** Set it to off in php.ini ***
[[WARNING]] php.ini: magic_quotes_gpc set to off
*** Set it to off in php.ini ***
OK php.ini: register_globals set to off
OK php.ini: session.auto_start set to off
Vérification de la version de symfony
$ /Applications/MAMP/bin/php5/bin/php lib/vendor/symfony/data/bin/symfony -V
symfony version 1.2.4 (/Applications/MAMP/htdocs/sfinstallation/jobeet/lib/vendor/symfony/lib)
Création du projet jobeet
$ /Applications/MAMP/bin/php5/bin/php lib/vendor/symfony/data/bin/symfony generate:project jobeet
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/apps
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/cache
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/config
>> file+ /Applications/MAMP/htdocs/sfins...ion/jobeet/config/databases.yml
>> file+ /Applications/MAMP/htdocs/sfins.../ProjectConfiguration.class.php
>> file+ /Applications/MAMP/htdocs/sfins...lation/jobeet/config/propel.ini
>> file+ /Applications/MAMP/htdocs/sfins...on/jobeet/config/properties.ini
>> file+ /Applications/MAMP/htdocs/sfins...jobeet/config/rsync_exclude.txt
>> file+ /Applications/MAMP/htdocs/sfins...lation/jobeet/config/schema.yml
>> file+ /Applications/MAMP/htdocs/sfins...tion/jobeet/config/vhost.sample
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/data
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/data/fixtures
>> file+ /Applications/MAMP/htdocs/sfins...beet/data/fixtures/fixtures.yml
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/doc
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/log
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/plugins
>> file+ /Applications/MAMP/htdocs/sfinstallation/jobeet/symfony
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/test
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/test/bootstrap
>> file+ /Applications/MAMP/htdocs/sfins...t/test/bootstrap/functional.php
>> file+ /Applications/MAMP/htdocs/sfins.../jobeet/test/bootstrap/unit.php
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/test/functional
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/test/unit
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web
>> file+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/.htaccess
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/css
>> file+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/css/main.css
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/images
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/js
>> file+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/robots.txt
>> dir+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/uploads
>> dir+ /Applications/MAMP/htdocs/sfins...ation/jobeet/web/uploads/assets
>> tokens /Applications/MAMP/htdocs/sfins...ion/jobeet/config/databases.yml
>> tokens /Applications/MAMP/htdocs/sfins...lation/jobeet/config/propel.ini
>> tokens /Applications/MAMP/htdocs/sfins...on/jobeet/config/properties.ini
>> tokens /Applications/MAMP/htdocs/sfins.../ProjectConfiguration.class.php
>> tokens /Applications/MAMP/htdocs/sfins...tion/jobeet/config/vhost.sample
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/web/uploads
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/cache
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/log
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/symfony
>> chmod 777 /Applications/MAMP/htdocs/sfins...ation/jobeet/web/uploads/assets
>> plugin Configuring plugin - sfPropelPlugin
>> plugin Configuring plugin - sfProtoculousPlugin
Création de l'application frontend
$ /Applications/MAMP/bin/php5/bin/php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend
>> dir+ /Applications/MAMP/htdocs/sfins...ion/jobeet/apps/frontend/config
>> file+ /Applications/MAMP/htdocs/sfins...et/apps/frontend/config/app.yml
>> file+ /Applications/MAMP/htdocs/sfins...licationConfiguration.class.php
>> file+ /Applications/MAMP/htdocs/sfins.../apps/frontend/config/cache.yml
>> file+ /Applications/MAMP/htdocs/sfins...s/frontend/config/factories.yml
>> file+ /Applications/MAMP/htdocs/sfins...pps/frontend/config/filters.yml
>> file+ /Applications/MAMP/htdocs/sfins...pps/frontend/config/routing.yml
>> file+ /Applications/MAMP/htdocs/sfins...ps/frontend/config/security.yml
>> file+ /Applications/MAMP/htdocs/sfins...ps/frontend/config/settings.yml
>> file+ /Applications/MAMP/htdocs/sfins...t/apps/frontend/config/view.yml
>> dir+ /Applications/MAMP/htdocs/sfins...ation/jobeet/apps/frontend/i18n
>> dir+ /Applications/MAMP/htdocs/sfins...lation/jobeet/apps/frontend/lib
>> file+ /Applications/MAMP/htdocs/sfins...s/frontend/lib/myUser.class.php
>> dir+ /Applications/MAMP/htdocs/sfins...on/jobeet/apps/frontend/modules
>> dir+ /Applications/MAMP/htdocs/sfins.../jobeet/apps/frontend/templates
>> file+ /Applications/MAMP/htdocs/sfins...s/frontend/templates/layout.php
>> tokens /Applications/MAMP/htdocs/sfins...ps/frontend/config/settings.yml
>> file+ /Applications/MAMP/htdocs/sfinstallation/jobeet/web/index.php
>> file+ /Applications/MAMP/htdocs/sfins...ion/jobeet/web/frontend_dev.php
>> tokens /Applications/MAMP/htdocs/sfinstallation/jobeet/web/index.php
>> tokens /Applications/MAMP/htdocs/sfins...ion/jobeet/web/frontend_dev.php
>> rename /Applications/MAMP/htdocs/sfins...frontendConfiguration.class.php
>> tokens /Applications/MAMP/htdocs/sfins...frontendConfiguration.class.php
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/web/uploads
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/cache
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/log
>> chmod 777 /Applications/MAMP/htdocs/sfinstallation/jobeet/symfony
>> chmod 666 /Applications/MAMP/htdocs/sfins...et/cache/project_autoload.cache
>> chmod 777 /Applications/MAMP/htdocs/sfins...ation/jobeet/web/uploads/assets
>> dir+ /Applications/MAMP/htdocs/sfins...jobeet/test/functional/frontend
Là j'ai tenté d'accéder à la page : http://localhost/sfinstallation/jobeet/ ... nd_dev.php
Et j'ai une page "Symfony Project Created" (sans les images mais je n'ai pas encore configuré le VirtualHost et l'Alias).

Par contre, en tentant d'accéder à : http://localhost/sfinstallation/jobeet/ ... v.php/test
Fatal error: Uncaught exception 'sfError404Exception' with message 'Action "test/index" does not exist.' in /Applications/MAMP/htdocs/sfinstallation/jobeet/lib/vendor/symfony/lib/controller/sfController.class.php:202 Stack trace:
#0 /Applications/MAMP/htdocs/sfinstallation/jobeet/lib/vendor/symfony/lib/controller/sfFrontWebController.class.php(48): sfController->forward('test', 'index')
#1 /Applications/MAMP/htdocs/sfinstallation/jobeet/lib/vendor/symfony/lib/util/sfContext.class.php(159): sfFrontWebController->dispatch()
#2 /Applications/MAMP/htdocs/sfinstallation/jobeet/web/frontend_dev.php(13): sfContext->dispatch()
#3 {main} thrown in /Applications/MAMP/htdocs/sfinstallation/jobeet/lib/vendor/symfony/lib/controller/sfController.class.php on line 202
[/quote]

Posté : 21 mars 2009, 13:50
par naholyr
Au temps pour moi, c'est en fait tout à fait normal dans la version 1.2, cf. http://www.symfony-project.org/blog/200 ... st-formats pour en savoir plus.
La documentation de la 1.2 n'est vraiment plus du tout à la hauteur de la réputation qu'elle a acquis avec la 1.0, hélas :(

Posté : 21 mars 2009, 14:38
par zeus
La documentation de la 1.2 n'est vraiment plus du tout à la hauteur de la réputation qu'elle a acquis avec la 1.0, hélas :(
Tu trouvais la doc au niveau, toi, avant ?

Une fois que tu maitrises l'API, ça va, mais sinon, dur dur de trouver :?

Posté : 21 mars 2009, 16:23
par julian
Je comprends rien :?
Je vais essayer continuer le tutoriel car c'est probablement moi qui n'ait pas assez de connaissances pour comprendre tout.

merci en tout cas, et je reviendrais avec mes questions :p

Posté : 21 mars 2009, 20:41
par naholyr
OK alors pour te donner plus d'infos, les erreurs 404 (ou toute autre exception) ne sont plus gérées de la même manière en prod et en dév (ou plutôt, selon que le mode debug est activé ou non).



Avec le mode debug activé (environnement de développement)

Les exceptions (les erreurs 404 en font partie) ne sont pas catchées, et la redirection vers une page de ton choix en cas d'erreur 404 n'est donc pas possible.
Le mieux que tu puisses faire dans cet environnement si tu ne souhaites pas avoir de page d'erreur "brute", c'est de créer un fichier "config/error/exception.html.php" (comme indiqué dans l'url que je t'avais fournie précédemment) qui présentera l'erreur comme tu le souhaites.



Sans le mode debug activé (environnement de production)

Dans ce cas, les erreurs 404 sont correctement catchées, et le paramètrage de /apps/myapp/config/settings.yml sera suivi pour afficher une page de ton choix (qui, pour le coup, sera incluse dans layout.php, ce qui a son importance pour la cohérence du rendu sur ton site) :

Code : Tout sélectionner

all: .actions: error_404_module: default # To be called when a 404 error is raised error_404_action: error404 # Or when the requested URL doesn't match any route
En revanche, les autres erreurs ne seront pas plus catchées qu'avant (cas d'une exception non récupérée, qui lève du coup une "erreur 500"), et le mieux que tu pourras faire sera de les customiser avec un fichier "config/error/error.html.php" (en dév c'est "exception", en prod c'est "error").




Quant à la doc, ben si elle était plutôt pas mal en 1.0, et elle avait le mérite d'être cohérente... Là dans plein d'endroits de la documentation ils font référence à des parametrages qui n'existent plus, ou qui ne fonctionnent plus depuis tel ou tel bugfix, etc... Ils font des changements dans le fonctionnel qui ne sont pas toujours répercutés dans la doc, avant ça existait beaucoup moins ce genre de problème. Zaninotto est parti :?

Posté : 21 mars 2009, 21:32
par pascaltje
+1 pour la doc !

c'était mieux avant. Là pour trouver quelquechose, il faut chercher dans :
- la doc officielle (bouquin original)
- la doc sur les formulaires
- jobeet
- l'API
- les posts du blog

en clair il faut se démerder et être débrouillard. mais bon, ça m'a pas empêché de sortir un site avec symfony aujourd'hui 8-)

A+

Pascal

Posté : 22 mars 2009, 17:47
par julian
Merci pour ces infos naholyr.
Ces pages exception.html.php et error.html.php existent déjà dans le répertoire lib/exceptions/data/ de symfony ?
Le truc c'est que dans le tuto, ils disent qu'on obtient une page "Oops an error occured" en mode production, et une page détaillant l'erreur (avec des couleurs, un morceau de code, etc...) en mode développement.

Ce que tu me dis c'est qu'ils ont supprimés cette gestion d'affichage par défaut dans la 1.2 ?
Car moi j'obtiens cette page :
Image

Je comprends qu'on puisse modifier ces pages pour les personnaliser mais pourquoi elles ne sont pas disponibles par défaut alors ?

Posté : 22 mars 2009, 19:19
par naholyr
OK donc effectivement, ce que tu obtiens n'est pas normal, et je pense que ça doit venir d'un contrôleur mal personnalisé. Je serais toi j'essaierais en réinstallant le framework, car voilà ce que tu devrais obtenir (pris depuis un projet en 1.2, fraichement démarré de la semaine dernière, avec le framework en svn:externals sur la branche 1.2) :

- en dév
Image
- et en prod
Image

Posté : 22 mars 2009, 19:34
par julian
Oui, c'est ce que j'ai fait (mon second message de ce topic).
Par contre, je n'ai touché à aucun fichier, j'ai juste généré le projet jobeet, et généré l'application frontend.
La page "Symfony Project Created" s'affiche bien quand j'essaie d'accéder à http://localhost/sfinstallation/jobeet/ ... nd_dev.php
Jusque là pas de souci, mais par contre si j'essai d'aller sur http://localhost/sfinstallation/jobeet/ ... v.php/test (page inexistante)
J'ai l'erreur suivante au lieu de le page que tu as montré :
Image

Posté : 22 mars 2009, 22:12
par marc1306
Salut je suis justement sur le tuto de jobeet ( jour 3 ^^ )
pour ma part les 404 s'affichent correctement .

pour l'instant j'ai une belle page !

pour ton soucis ( ce n'est qu'une supposition )
peut être un soucis indirect de droits .. sur les fichiers. ou de config apache.

justement comme les Alias etc ne sont pas fait...
pour ma part j'ai fait un virtual host sur un port différent.

bon je continue sur : config /schema.yml ^^

Posté : 22 mars 2009, 23:23
par julian
Merci marc pour ta réponse. Je viens de modifier tous les droits sur les répertoires et ça n'a rien changé.
J'ai aussi configuré le VirtualHost et l'alias donc les images s'affichent mais toujours pas les pages d'erreurs... :(

Posté : 23 mars 2009, 11:15
par agité
j'en suis à la 1.0 de sf et pourtant jamais trop bloqué, si tu trouve pas de réponses demande sur le chan #symfony-fr sur irc.freenode.net ou sur les google groups ça aide beaucoup.

bon courage.

Posté : 23 mars 2009, 15:21
par julian
Moi je pencherai pour une mauvaise configuration PHP, mais laquelle :?