IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Fatal error: Class 'BaseForm' not found in … sfFormObject.class.php on line 20 [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut Fatal error: Class 'BaseForm' not found in … sfFormObject.class.php on line 20
    Bonjour,

    suite à une migration de structure de base nécessaire et les indications trouvées sur ce lien (http://stackoverflow.com/questions/9...only-one-table) je tombe sur l'erreur indiquée en titre.

    L'erreur se produit dans la vue en appelant link_to avec un paramètre de confirmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><?php echo link_to('<img src="/.../supprimer.png"/>', 'action/delete?action_id='.$action->getActionId(), array('method' => 'delete', 'confirm' => '&Ecirc;tes-vous s&ucirc;r de vouloir supprimer cette action ?')) ?></td>
    Bien entendu BaseForm.class.php existe bien dans /lib/form/.

    J'ai effectué les commandes indiqués dans le lien ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    php symfony doctrine:generate-migrations-diff
    php symfony doctrine:migrate
    php symfony doctrine:build --all-classes
    Il y a eu de nombreuses erreurs de contraintes à la deuxième phase résolues en lançant la commande plusieurs fois (d'où d'autres erreurs sur les modifications déjà faites).

    La dernière commande finie aussi par générer cette erreur (je ne l'avais pas aperçue au départ).

    J'ai essayé de contourner le problème en générant le schéma depuis la base, en bon état, puis les modèles et les classes, le tout entre-coupé de cache:clear régulier.
    Résultat : néant.

    Recherches sur le web.
    Résultat : néant (sauf les logs des sites ayant la même erreur).

    Recherche dans la doc Symfony.
    Résultat : néant.

    Je soupçonne un problème de chemin mal configurés (bien que rien n'ai changé de ce point de vue) et ai cherché à trouver comment le configurer, sans résultat.


    Quelqu'un aurait une solution ou à défaut une idée ?
    Comment faire en sorte que la migration soit terminée, sauter cette erreur ou indiquer où trouver la classe ?

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    peut etre que la génération par doctrine n'est pas complete.
    pourquoi ne pas faire un doctrine:build-all?
    Attention a bien mettre "No" lorsqu'il demande d'ecraser les données en bdd
    (fait un backup de ta base on sait jamais)

    Ps: j'utilise propel, donc j'pourrai pas t'aider plus que ca

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut
    Merci pour cette réponse.


    Sans doute parce que la doc n'indique pas la présence de cette protection et que j'en ai assez de restaurer à la main table par table la base exportée par phpmyadmin sans tenir compte des contraintes (insertions avant que toutes les tables ne soient créées ...).

    Je viens d'essayer et effectivement il m'averti ... et quitte immédiatement.

    Résultat : néant.

    Symfony : 10 - moi : 0


    Manifestement le problème vient de l'ordre de chargement des classes.

    La ligne ajoutant le lien semble faire appel à sfFormObject qui dérive de BaseForm avant que celui-ci ne soit chargé, donc plante, et si je force le chargement par un include, cela plante plus tard au chargement normal de BaseForm, que je ne peux/sais pas court-circuiter (class_exists() dans ce fichier ne détecte pas qu'elle existe !).


    L'état actuel est :
    - je ne change pas ma base et ne peux terminer le développement de l'appli,
    - je change avec l'aide de Symfony et certaines pages plantent ; je pourrais éventuellement bidouiller cela pour que ça finisse par marcher, par exemple en écrivant mon bout de code de confirmation en cliquant sur le lien,
    - je ne touche plus aux commandes symfony et modifie à la main les classes du modèle, jusqu'au prochain crash.


    La conclusion est qu'avec n tentatives de migrations depuis 11h ce matin, symfony m'a en effet fait gagné du temps de développement : la prochaine fois, je choisirai un autre environnement de développement !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 21
    Points
    21
    Par défaut
    un truc que tu dois essayer (j'ai eu le probleme en travaillant en root), c'est de faire un chmod 777 sur tout ton dossier.

    parce que si tu exécutes les commandes en root, tu donnes les droits qu'au root et ca empeche la lecture.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut
    @hardy021, la seule commande root que je fais, c'est le nettoyage du cache parce que ce n'est pas autorisé autrement il me semble.


    Bon finalement le problème venait en partie de moi : la base du logiciel que j'ai repris contenait une table "base". Je me suis emmêler dans les messages d'erreurs entre lib/form/baseForm.php et lib/form/doctrine/base/baseForm.php ; il y a de quoi, l'inclusion forcée du premier était suivie de l'erreur de chargement du suivant.

    Néanmoins dès le début il y a eu une double erreur de Symfony :
    - il s'est bien planté en tombant sur cette table, sans doute parce que "base" est un préfixe utilisé dans forms/, model/ et filters/
    - rien ne permet clairement ensuite d'identifier le problème, de l'expliquer, de le résoudre. Je n'ai rien trouvé dans la doc de symfony qui liste les messages d'erreurs, les explique et leur donne une explication.


    Finalement j'ai résolu le problème en supprimant les fichiers inutiles de ces dossiers à la main, sauf baseFormDoctrine et forms/baseForm.php bien sûr !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] Fatal error: Class 'toto' not found
    Par Onime Records dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/01/2011, 19h29
  2. [1.x] Fatal error: Class 'PDO' not found
    Par phpiste dans le forum Symfony
    Réponses: 5
    Dernier message: 14/07/2010, 12h40
  3. [ZF 1.10] Fatal error: Class 'Zend_Config_Ini' not found
    Par absot dans le forum Zend Framework
    Réponses: 3
    Dernier message: 15/04/2010, 09h13
  4. Fatal error: Class SoapServer not found in
    Par l.laurent60 dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 21/05/2009, 10h12
  5. [MySQL] Fatal error: Class 'mysqli' not found in site
    Par rashid120 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/07/2008, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo