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 :

Sonata/génération de l'Id [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut Sonata/génération de l'Id
    Bonjour,

    Je galère depuis ce matin sur la génération de la clé primaire,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
         * Primary key
         *
         * @var string
         *
         * @ORM\Id
         * @ORM\Column(name="id", type="string", length=32)
         * @ORM\GeneratedValue(strategy="NONE")
         */
        private $id;
    Naturellement faut passer par le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct() 
    {
     $this->id = md5(microtime());
     }

    Dans mon entité j'ai bien le setter et le getter :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function setId($id)
        {    
            $this->id = $id;
            return $this;
     
        }
     
     
        public function getId()
        {
            return $this->$id;
     
        }
    Sur Ajout d'un nouvelle page n y a pas de bouton créer et ajouter, y a plutôt mettre à jour , pour Sonata Admin l'id de l'entité existe ....

    Quelqu'un peur m'aider merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Bonjour,

    Je ne suis pas sur à 100% de ma réponse, mais je pense que l'idée est bonne.

    Lorsque tu crée ta nouvelle ligne (supposons un utilisateur), l'entité Utilisateur est crée, passe par le constructeur et se fait affecté un id.

    La page lors de la création du layout, va détecter que l'entité possède un id, qu'il suppose avoir récupéré depuis la base de données (meme si cela est faux)
    donc pour la page, l'entité existe deja, il ne s'agit donc pas d'un ajout, mais d'une modification, d'où la présence du bouton update.

    Essaye de voir en retirant ceci de ton constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->id = microtime();
    et en ajoutant a la fin de la page Admin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function onPrePersist(User obj)[
       obj->setId(microtime());
    }
    Comme cela avant de mettre la ligne dans la base de données, il va attribué ton id dans ton Utilisateur.

    Bien sur les bouts de code sont a modifier selon tes besoins j'ai fais cela de tete, je ne suis plus sur de la syntaxe de onPrePersist.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    Merci :-) Non ca ne marche pas j'avais essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        /**
        * @ORM\PrePersist
        * @ORM\PreUpdate
        */
        public function prePersist(Articles $article)
        {
     
              $article->setId(md5(microtime())); 
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Entity of type Articles is missing an assigned ID for field 'id'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Rebonjour,

    Il semble que tu as mis la fonction prepersist dans ton entité, il faut le mettre dans ta page Admin, normalement ArticlesAdmin

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    Tout a fait oui au début j'avais mis ca dans ArticlesAdmin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FatalErrorException: Compile Error: Declaration of \ArticlesAdmin::prePersist() must be compatible with Sonata\AdminBundle\Admin\AdminInterface::prePersist($object) in /ArticlesBundle/Admin/ArticlesAdmin.php
    Je n'ai pas avancé du coup j'ai mis ça dans mon entité Articles ;-)

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Ton erreur signifie que tu essaye de surchargé une methode mais elle n'est pas compatible avec la methode de la classe parente (ici AdminInterface)

    tu as du ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Classe ArticlesAdmin
    public function prePersist(){
    }
    il faut que ca soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Classe ArticlesAdmin
    public function prePersist($object){
    }
    Ca devrait marcher mieux après

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

Discussions similaires

  1. [Débutant] génération d'un EJB avec GenIc
    Par Stessy dans le forum JOnAS
    Réponses: 65
    Dernier message: 31/01/2005, 10h50
  2. [UML] génération de code avec omondo.uml
    Par RENAULT dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/10/2003, 13h14
  3. Génération programmatique d'un UUID
    Par jIdJo dans le forum MFC
    Réponses: 2
    Dernier message: 18/07/2003, 02h50
  4. [Lomboz] Génération de code pour EJB
    Par paikan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2003, 14h28

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