Voilà, j'en avais marre de faire du PHP simple et après avoir jeté un œil à différents Frameworks (CakePHP, FuelPHP et Symfony2), je me suis décidé à apprendre le Framework Symfony2.
Cela fait 3 jours que je suis le tutoriel très bien fait de winzou, mais me voilà devant une impasse. je suis tombé sur une erreur que je n'arrive pas à résoudre.
Avant toute chose, je précise que je suis sous Win7 x64, PHP 5.3.13, Symfony 2.3.4.
Voici l'erreur (qui est très claire) :
The autoloader expected class "Gamepotes\TestBundle\Antispam\GamepotesAntispam" to be defined in file "C:\wamp\www\symfony2\Symfony/src\Gamepotes\TestBundle\Antispam\GamepotesAntispam.php". The file was found but the class was not in it, the class name or namespace probably has a typo.
Et voici les différents fichiers qui pourraient être incriminés :
$antispam = $this->container->get('gamepotes_test.antispam');
if($antispam->isSpam($text)){
throw new \Exception("Votre message semble être un spam");
}
Je me doute que l'erreur vient du nommage de namespace ou de ma classe, mais je n'arrive pas à mettre le doigt sur l'erreur. Cela m'ennuie fortement car cette erreur me bloque dans ma progression de l'apprentissage de Symfony2 au vu de l'importance des services.
Comme mentionné dans le message d'erreur, Symfony considère qu'il y a une probable faute de frappe dans la déclaration du namespace ou du nom de la classe dans GamepotesAntispam.php. Comme je n'arrive pas plus à voir que toi (ce qui est ici m'a aussi l'air cohérent), je te propose de vérifier s'il n'y a pas des caractères invisibles étranges qui poseraient problème dans le fichier de la classe, comme des espaces insécables, entre autres.
Si tu supprimes carrément le fichier, est-ce que l'erreur change ? Parce que je finis par me demander s'il ne va pas chercher au mauvais endroit, là où tu aurais un fichier que tu ne modifies jamais, mais qui n'est pas correct.
Non, dans ce cas là il m'affiche cette erreur, qui est logique :
FatalErrorException: Error: Class 'Gamepotes\TestBundle\Antispam\GamepotesAntispam' not found in C:\wamp\www\symfony2\Symfony\app\cache\dev\appDevDebugProjectContainer.php line 1289
As-tu bien vérifié ta version de PHP ? C'est la piste que j'aurais à te proposer maintenant. Essaie de vérifier en accédant à config.php au lieu de app_dev.php, et regarde ce qu'il t'est dit.
Si la classe n'est pas trouvée comme attendu, c'est probablement que le namespace n'est pas pris en compte, et si c'est bien ça, tu n'as pas une version de PHP qui soit utilisable avec Symfony 2. Il FAUT PHP 5.3.3 ou plus.
Note : pourquoi ces "deux personnes" au pseudonyme si semblable ?
Aussi étonnant que cela puisse paraître, 5.3.13 > 5.3.3 (les 0 initiaux sont rarement utilisés), donc ce n'est pas ce que je pensais… Mais je suis à court de pistes
Je suis un peu déçu de ne pas avoir su régler mon problème. J'ai un peu abandonné du coup. Je continuerai à suivre le tuto sans faire l'appli et mettrai tout ça en pratique çà ce moment là. En espérant que cela fonctionne.
Je me permets de déterrer le topic. Pour ma part je me suis trompé dans le nom de la classe de mon bundle. Au lieu de mettre " class AdvertController " (par exemple) j'ai mis le nom de la class du contrôleur par défaut "class DefaultController".
Je vous conseille en cas du même problème de bien vérifier le namespace de la classe, Si vous êtes par exemple sous en IDE d'appuyer sur CTRL et vous clicker avec le boutton gauche de la souris sur la classe en quetion, si une nouvelle fenêtre vous ouvre ça veux dire que le namespace de la classe et bien définie, dans le cas échéant vous trouvez votre erreur.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Ingénieur Back-End SYMFONY
NOUR EL HADI Anouar
Pas d'aide concernant le code par MP, le forum est là pour ça :)