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 :

FOSUserBundle symfony 2.1 namespace [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 48
    Points
    48
    Par défaut FOSUserBundle symfony 2.1 namespace
    Bonjour,

    J'utilise Symfony 2.1 et j'ai tenté d'installer FOSUser en suivnat différents tutorial
    Cela semble assez simple mais j'ai 2 problèmes à la fin :
    1/ J'ai une erreur
    MappingException: The class 'Vedim\UtilisateurBundle\Entity\Utilisateur' was not found in the chain configured namespaces Vedim\BackEndBundle\Entity
    PS : J'ai installé FOS via composer
    PS1 : Il me semble qu'en SYmfony 2.1 "pas besoin de modifier le app/autoload.php"..
    PS2 : J'ai vidé le cache
    PS3 : J'ai vérifié la syntaxe, les masjuscule de ma classe "Utilisateur"

    2/ la ligne de commande de céation de la base ne crée rien du tout
    >php app/console doctrine:schema:update --force
    Nothing to update - your database is already in sync with the current entity metadata.
    Auriez-vous des piste ?
    Merci de vos conseils éclairés.
    _______________________________________________________________________________________________________

    Voici mes différentes classes :
    --------------------------------
    AppKernel.php enregistrant le bundle VedimUtilisateurBundle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
     
    use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
     
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
    ....
                new FOS\UserBundle\FOSUserBundle(),
                new Vedim\UtilisateurBundle\VedimUtilisateurBundle(),
                new Vedim\BackEndBundle\VedimBackEndBundle(),
            );
     
            return $bundles;
        }
    ....
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Classe du bundle héritant de FOSBundle
    <?php
     
    namespace Vedim\UtilisateurBundle;
     
    use Symfony\Component\HttpKernel\Bundle\Bundle;
     
    class VedimUtilisateurBundle extends Bundle
    {
        public function getParent()
        {
            return 'FOSUserBundle';
        }
     
    }
    Utilisateur.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
    namespace Vedim\UtilisateurBundle\Entity;
    use FOS\UserBundle\Entity\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="vedim_utilisateur")
     */
    class Utilisateur extends BaseUser
    {
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
    }
    Config.yml
    fos_user:
        db_driver:     orm                        # Le type de BDD à utiliser, nous utilisons l'ORM Doctrine depuis le début
        firewall_name: main                       # Le nom du firewall duquel on utilisera ces utilisateurs
        user_class:    Vedim\UtilisateurBundle\Entity\Utilisateur # La classe de l'entité User que nous venons de définir
    

  2. #2
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    A votre place, j'enleverai la référence a la classe utilisateur dans Vedim\BackEndBundle\

    Ensuite, je finirai de généré mes classes dans utilisateur bundle, en particulier les tables en BDD.

    Pour finir, un cache:clear

    Une fois tout cela mis en place, je remettrai la liaison depuis Vedim\BackEndBundle pour voir si l'erreur est toujours présente.

    Bon courage, cette erreur me laisse un peu pensif...

    Pierre

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 48
    Points
    48
    Par défaut
    Merci de cette réponse.
    Je n'ai aucune référence a la classe utilisateur dans Vedim\BackEndBundle\
    C'est le chargement du bundles FOSUserBundle par l'AppKernel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class AppKernel extends Kernel {
        public function registerBundles()    {
            $bundles = array(
    ....
                new FOS\UserBundle\FOSUserBundle(),
     ...
    }
    couplé avec la configuration qui provoque l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fos_user:
        user_class:    Vedim\UserBundle\Entity\User
    Si j’enlève le chargement de FOSUserBundle et UserBundle et aussi la config "fos_user:" de config.yml, tout re-fonctionne.
    Si je change la class user_class par une classe de mon buddle maitre 'BackupBuddle", tout fonctionne aussi

    Tous se passe comme si le class loader ne trouve pas la classe de mon nouveau bundle "UserBundle" mis en place pour hériter de FOSUserBundle .

    En Symfony2.1, il semble que tous se qui se trouve dans /src soit accessible mais la .... non.
    Faut-il faire autre chose que l'enregistrer dans le AppKernel pour pourvoir en utiliser les classes de son namespace ?
    En Symfony 2.0, il fallait modifier autoload.php pour y integrer son namespace mais la fonction n'existe plus en 2.1.
    Je suis un peu perdu
    Merci pour vos pistes de résolutions.

    Je n'arrete pas de suprimer le cache :-)

  4. #4
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Je doute que ca ai une importance, mais l'odre des bundle peut il etre suspect dans appKernel ?

    Je met d'abord mon site principal, puis les dépendances pour ma part...

    Mais comme je t'ai dit, c'est plutot une colle, et je suis touours en 2.0 pour ma part.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 48
    Points
    48
    Par défaut
    C'était une idée, l'ordre de chargement des bundle mais ... non :-). J'ai essayé dans tous les sens sans succes.
    J'avais aussi une piste avec quelqu'un qui disait avoir eu le problème car sa classe comportait un "_" mais ce n'est pas mon cas, le nom de ma classe est super simple : "User"

    Je pense que c'est vraiment un "problème" de la version 2.1. Le naespacedu nouveau bundle n'est pas mis automatiquement dans le chargement initial, en java on dirai qu'il n'est pas dans le classpath (on dit comme ca avec php ?).

    Il faut que j'arrive à mettre ce namespace du nouveau bundle dans le chargement initial que je croyais automatique.... ou alors il y a quelque chose de plus flagrant que j'ai raté.

    Autre piste : J'ai chargé FOSUser via composer, mais j'ai chargé la version dev-master.... Y aurait-il un boque ?

    "friendsofsymfony/user-bundle": "dev-master"

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    je ne pense pas que le problème soit en lien avec l'autoload
    pour en être sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
     
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
    ....
                new FOS\UserBundle\FOSUserBundle(),
                new Vedim\UtilisateurBundle\VedimUtilisateurBundle(),
                new Vedim\BackEndBundle\VedimBackEndBundle(),
            );
     
            //lance une exception s'il ne trouve pas la classe
            $user=new Vedim\UtilisateurBundle\Entity\Utilisateur();
     
            return $bundles;
        }
    ....
    }
    l'erreur ne dit pas qu'il n'a pas trouvé la classe Utilisateur, mais qu'il n'a pas trouvé de classe Utilisateur mappé par Doctrine (ce qui est cohérent par rapport au fait qu'il ne fait pas de modif dans ta base).

    essaie de voir au niveau de la config de doctrine
    http://symfony.com/fr/doc/current/re.../doctrine.html
    normalement l'option doctrine.orm.auto_mapping est à true
    ( ce qui veut dire qu'il mappe toutes les classes situés dans les namespace {My\Bundle\}Entity )

    à voir aussi, peut-être as tu dans la config de ton UtilisateurBundle un fichier de mapping format xml ou yml qui prendrait le pas sur le mapping par annotation

    essaie également de créer une entité bidon dans tes différents bundles pour voir s'il détecte les changements.

    essaie également de vider le cache apc

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 48
    Points
    48
    Par défaut
    Merci de vos réponses et pistes qui m'ont vraiment aidé.

    J'ai trouvé la solution : J'avais modifier le config.yml pour avoir 2 connexions à 2 BD différentes selon le bundle utilisé.
    Mon nouveau bundle n'était pas ici associé à une connexion et le système ne selectionnait pas la conexion par defaut. En ajoutant mon buddle à une connexion, tous est rentré dans l'ordre.
    Mais le message n'était pas très explicite en parlant de "namespaces not found"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     orm:
            default_entity_manager:   vedim
            entity_managers:
                vedim:
                    connection:       vedim
                    mappings:
                        VedimBackEndBundle: ~
                        VedimUserBundle: ~   <--- ligne ajouté
                autreBD:
                    connection:       autreBD
                    mappings:
                        VedimTestBundle: ~

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

Discussions similaires

  1. [2.x] Symfony 2.1 : problème de traduction [FOSUserBundle]
    Par nonerd dans le forum Symfony
    Réponses: 2
    Dernier message: 28/08/2013, 08h57
  2. [2.x] Symfony 2 - Surcharge Usermanager FosUserbundle
    Par sledge00 dans le forum Symfony
    Réponses: 5
    Dernier message: 26/05/2013, 17h27
  3. Réponses: 2
    Dernier message: 02/12/2012, 15h18
  4. [2.x] [Symfony 2] FOSUserBundle register role
    Par fredhouse dans le forum Symfony
    Réponses: 0
    Dernier message: 27/06/2012, 17h09
  5. [2.x] démarrage symfony et fosuserbundle
    Par altair8080 dans le forum Symfony
    Réponses: 12
    Dernier message: 23/12/2011, 09h19

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