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 :

extension doctrine tree et crud [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 22
    Par défaut extension doctrine tree et crud
    salut

    j'ai une entité tree plutôt bien faite et quand je lui installe les crud, que je réadapte le formtype pour avoir ce qui m'intéresse (lui donner un titre et un parent et que le reste se fasse "automatiquement" en fonction), il veut pas me le créer...
    en gros, il me dit que la colonne lft peut pas être vide, ca sera donc aussi le cas pour la colonne droite.

    en gros, voilà mon entité :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <?php
     
    namespace MyModelBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Gedmo\Mapping\Annotation as Gedmo;
     
    /**
     * @Gedmo\Tree(type="nested")
     * @ORM\Table(name="aw_tree")
     * @ORM\Entity
     * @ORM\HasLifecycleCallbacks
     */
    class AwTree 
    {
        /**
         * @ORM\Column(name="id", type="bigint")
         * @ORM\Id
         * @ORM\GeneratedValue
         */
        private $id;
     
        /**
         * @ORM\Column(name="title", type="string", length=64, nullable=false)
         */
        private $title;
     
        /**
         * @Gedmo\TreeLeft
         * @ORM\Column(name="lft", type="integer")
         */
        private $lft;
     
        /**
         * @Gedmo\TreeLevel
         * @ORM\Column(name="lvl", type="integer")
         */
        private $lvl;
     
        /**
         * @Gedmo\TreeRight
         * @ORM\Column(name="rgt", type="integer")
         */
        private $rgt;
     
        /**
         * @Gedmo\TreeRoot
         * @ORM\Column(name="root", type="integer", nullable=true)
         */
        private $root;
     
        /**
         * @Gedmo\TreeParent
         * @ORM\ManyToOne(targetEntity="AwTree", inversedBy="children")
         * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL")
         */
        private $parent;
     
        /**
         * @ORM\OneToMany(targetEntity="AwTree", mappedBy="parent")
         * @ORM\OrderBy({"lft" = "ASC"})
         */
        private $children;
    //...
     
        /**
         * @ORM\PrePersist
         */
        public function __construct()
        {
            $this->children = new \Doctrine\Common\Collections\ArrayCollection();
            if ($this->getParent() != null){
    	    	  parent::__construct();
    	    	  $this->lvl = parent::getLvl() + 1;
    	    	  $this->root = parent::getRoot();
    	     }
    	     else {
    	    	  $this->lvl = 0;
    	     }
        }
    }
    mon form
    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
     
    namespace MyModelBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class AwTreeType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('title')
                ->add('parent', 'entity', array('class'=>'MyModelBundle\Entity\AwTree', 'property'=>'title', 'required' => false))
            ;
        }
     
        public function getName()
        {
            return 'mymodelbundle_awtreetype';
        }
    }
    mon controller
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
     
    namespace MyModelBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
     
    use MyModelBundle\Entity\AwTree;
    use MyModelBundle\Form\AwTreeType;
    use Gedmo\Tree\TreeListener;
     
    /**
     * AwTree controller.
     *
     */
    class AwTreeController extends Controller
    {
    //...
        /**
         * Displays a form to create a new AwTree entity.
         *
         */
        public function newAction()
        {
            $entity = new AwTree();
            $form   = $this->createForm(new AwTreeType(), $entity);
     
            return $this->render('MyModelBundle:AwTree:new.html.twig', array(
                'entity' => $entity,
                'form'   => $form->createView()
            ));
        }
     
        /**
         * Creates a new AwTree entity.
         *
         */
        public function createAction()
        {
            $entity  = new AwTree();
            $request = $this->getRequest();
            $form    = $this->createForm(new AwTreeType(), $entity);
            $form->bindRequest($request);
     
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($entity);
                $em->flush();
     
                return $this->redirect($this->generateUrl('tree_show', array('id' => $entity->getId())));
     
            }
     
            return $this->render('MyModelBundle:AwTree:new.html.twig', array(
                'entity' => $entity,
                'form'   => $form->createView()
            ));
        }
    //...
    }
    et je capte pas ce que je dois rajouter dans mon prepersist ou mon controller pour que lft et rgt s'incrémentent automatiquement...

    si quelqu'un peut m'éclairer, ca serait cool.
    merci

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 22
    Par défaut
    j'ai tenté, dans le controller, d'utiliser les méthodes "persistAsLastChild" et "persistAsLastChildOf" à la place de persist, mais il me dit que les méthodes ne sont pas définies. d'où est ce qu'il faut les importer ?
    aussi, j'ai tenté de mettre NestedTreeRepository en repo de mon entité, et il me répond ca : "This repository can be attached only to ORM tree listener"

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 26 766
    Par défaut
    Citation Envoyé par gasmichou Voir le message
    aussi, j'ai tenté de mettre NestedTreeRepository en repo de mon entité, et il me répond ca : "This repository can be attached only to ORM tree listener"
    Bundle mal configuré : https://github.com/stof/StofDoctrine.../doc/index.rst.

    You have to activate the extensions for each entity manager for which you want to enable the extensions. The id is the id of the DBAL connection when using the ORM behaviors. It is the id of the document manager when using mongoDB.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 22
    Par défaut
    ok, c'est bon : l'enregistrement fonctionne et tout. j'ai juste eu a rajouter ca dans mon config.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    stof_doctrine_extensions:
        default_locale: fr_FR
        orm:
            default:
                tree: true
                timestampable: false # not needed: listeners are not enabled by default
    merci pour l'indication

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

Discussions similaires

  1. [2.x] Doctrine Tree : Cannot find any representation field
    Par etoileweb dans le forum Symfony
    Réponses: 3
    Dernier message: 12/05/2015, 09h27
  2. Réponses: 0
    Dernier message: 11/05/2015, 10h28
  3. doctrine tree behavior
    Par gasmichou dans le forum Doctrine2
    Réponses: 2
    Dernier message: 22/08/2011, 15h48
  4. Réponses: 8
    Dernier message: 15/11/2010, 10h51
  5. Réponses: 7
    Dernier message: 22/01/2010, 16h13

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