Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony2]The autoloader expected class...

Impossible pour moi de trouver l'erreur

3 septembre 2013 à 14:39:19

Bonjour tout le monde !

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 :

src\Gamepotes\TestBundle\Antispam\GamepotesAntispam.php

namespace Gamepotes\TestBundle\Antispam;
 
class GamepotesAntispam
{
	public function isSpam($text)
	{
		return ($this->countLinks($text) + $this->countMails($text)) >= 3;
	}

	private function countLinks($text)
	{
		preg_match_all(
		'#(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i',
		$text,
		$matches);

		return count($matches[0]);
	}

	private function countMails($text)
	{
		preg_match_all(
		'#[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}#i',
		$text,
		$matches);

		return count($matches[0]);
	}
}

src\Gamepotes\TestBundle\Resources\config\services.yml

 services:
    gamepotes_test.antispam:
        class: Gamepotes\TestBundle\Antispam\GamepotesAntispam



src\Gamepotes\TestBundle\Controller\BlogController.php

$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.

Merci beaucoup pour votre éventuelle aide :)

O/

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2013 à 8:16:10

Salut !

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.

-
Edité par Ymox 27 juillet 2017 à 12:52:13

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2013 à 16:29:34

Merci pour ta réponse.

J'ai recréé le fichier en y mettant uniquement le namsepace et la déclaration de la classe et j'ai toujours la même erreur :(

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2013 à 17:03:14

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.

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2013 à 18:10:01

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

  • Partager sur Facebook
  • Partager sur Twitter
5 septembre 2013 à 13:47:16

Quelqu'un aurait une petite idée svp ? Je suis un peu perdu :(
  • Partager sur Facebook
  • Partager sur Twitter
8 septembre 2013 à 14:54:22

Je me permets de upper le sujet...
  • Partager sur Facebook
  • Partager sur Twitter
8 septembre 2013 à 17:59:43

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 ?

-
Edité par Ymox 8 septembre 2013 à 18:01:41

  • Partager sur Facebook
  • Partager sur Twitter
8 septembre 2013 à 20:18:36

Désolé, c'est une erreur de ma part, je me connecte avec mon compte google et je me suis trompé de compte.

Eh bien, c'était tout bête, mais je suis effectivement en PHP 5.3.13, donc, ça ne saurait pas fonctionner ...

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2013 à 7:51:16

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 :(

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2013 à 8:49:26

Effectivement, je suis passé en 5.4.12 et je me retrouve avec la même erreur :(

(au passage, c'est un hors sujet, mais je viens de passer du statut d'étudiant à celui de diplômé et à la recherche d'un emploi :D)

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2013 à 8:55:37

nicosan a écrit:

(au passage, c'est un hors sujet, mais je viens de passer du statut d'étudiant à celui de diplômé et à la recherche d'un emploi :D)

Félicitations :)


Est-ce que tu as bien nettoyé ton cache de production ?

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2013 à 19:38:12

Merci :)

Oui, j'ai bien vidé le cache. Je l'ai fait via la console et même à la main.

Il y a bien un problème quelque part, mais il est bien caché en tout cas !

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2013 à 15:50:34

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.
  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2013 à 18:30:27

Je me permets de déterrer le sujet car je suis toujours sans solution

  • Partager sur Facebook
  • Partager sur Twitter
21 novembre 2013 à 16:46:02

J'ai le même problème, et je suis également à la recherche d'une solution...

Si je trouve, je te tiens au courant...

  • Partager sur Facebook
  • Partager sur Twitter
http://www.kiwi-sarl.ch
21 novembre 2013 à 16:59:22

Je viens de régler mon problème...

Un bon café pour penser à autre chose, et la solution te saute aux yeux droit après... !

Pour ma part, il s'agissait simplement des balises ouvrante de php que j'avais oublié de mettre dans mon fichier antispam.php (<?php)

Du coup, aucun code n'était interprété, et j'avais juste le texte en clair de ma classe.. Tout s'explique...

J'espère que tu trouvera aussi ton erreur...

-
Edité par Dark Lemon 21 novembre 2013 à 17:00:29

  • Partager sur Facebook
  • Partager sur Twitter
http://www.kiwi-sarl.ch
6 janvier 2015 à 14:25:59

Pour ma part, le soucis venait du NameSpace.
  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2015 à 11:48:34

use ...\.....\Entity\.... 

et non namespace  ...\.....\Entity\.... 

  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2016 à 11:01:41

il vous manque la balise <?php
  • Partager sur Facebook
  • Partager sur Twitter
20 juillet 2016 à 16:41:28

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".
  • Partager sur Facebook
  • Partager sur Twitter
27 juillet 2017 à 12:18:15

J'ai eu exactement le même problème, cela venait du namespace qui était mal définit.

Mon namespace était :

OC\PlatformBundle\Entity;

au lieu de

OC\PlatformBundle\Repository;

mon fichier AdvertRepository.php étant placé dans le dossier OC\PlatformBundle\Repository Symfony n'allait pas chercher au bon endroit. 

-
Edité par sabreleur 27 juillet 2017 à 12:28:26

  • Partager sur Facebook
  • Partager sur Twitter
8 août 2017 à 20:03:06

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.
  • Partager sur Facebook
  • Partager sur Twitter
16 août 2018 à 3:26:43

je viens de voir le même erreur, il faut juste bien vérifié le namespace :)
  • Partager sur Facebook
  • Partager sur Twitter

Ingénieur Back-End SYMFONY

NOUR EL HADI Anouar

16 août 2018 à 9:08:25

Bonjour,

Déterrage

Citation des règles générales du forum :

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

Je ferme ce sujet. Me contacter par MP si besoin.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)