2012-05-03 3 views
1

Je suis en train de programmer un site Web avec PHP en utilisant Symfony2.php "Classe non trouvée" et "Impossible de redéclarer classe" erreur

I défini une classe MainContent dans le fichier MainController.php

Et je devais utiliser cette classe dans un autre fichier contrôleur nommé SecurityController.php

Bien que ces deux classes sont définies dans le même espace, il a donné l'erreur:

Class 'MainContent' not found... 

J'ai donc essayé de définir la classe à nouveau en SecurityController.php mais le résultat est:

Cannot redeclare class 'MainContent...' 

Je ne comprends pas, c'est déclaré ou non.

En fait, je suis un programmeur C# et peut-être que je suis confus à cause de certaines différences entre ces langages.

Répondre

0

Symfony utilise ce que l'on appelle le chargement automatique. Comme votre classe n'est pas définie dans son propre fichier, suivant les règles de chargement automatique, elle ne peut pas être chargée, d'où la classe introuvable. Mais si vous définissez la classe, le script est traité avec succès, un autre fichier qui définit la même classe est inclus, et la collision (ne peut pas redéclarer la classe) est générée.

Les solutions possibles sont les suivantes:

  • Définir la classe en un seul endroit (mieux à l'extérieur du contrôleur) et utilisez include_once/require_once chaque fois que vous en avez besoin
  • Faire la classe en fait une classe d'aide Symfony, si autoloading fonctionne réellement
  • Chaque fois que vous déclarez la classe, utilisez

    if(!class_exists('ClassName')) { class ClassName {} }

Questions connexes