turk porno porno escort rokettube
Seite 2 von 2 ErsteErste 1 2
Ergebnis 21 bis 29 von 29

Thema: Daten aus Doctrine Entity in Zend Form zu Verfügung stellen

  1. #21
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Habe den Beitrag jetzt mehrmals gelesen, bin jetzt aber nicht genau sicher: Hast du jetzt aufgrund der n:m-Beziehung Probleme damit die Bücher mit den Formularen zu verwalten? Denn ich habe mittlerweile mehrere Fälle, z. B. bei einer Rechteverwaltung: Rollen und Privilegien. Die Verwaltung erfolgt mit ObjectMultiCheckbox-Elementen. Einen Fall mit ObjectSelect-Elemeten habe ich ebenfalls - bei beiden Fälle funktioniert die Speicherung ohne Probleme.

    Mit dem Hydrator gehe ich etwas anders um: setHydrator rufe ich bereits im Konstruktur meiner Formularklassen auf, welche von Factories aufgerufen werden. In meinen Service-Klassen setze ich dann mit $form->setObject() die jeweilige Entity (also entweder eine neues Objekt bei Erstellung oder ein vorhandenes aus der DB bei Bearbeitung) - direkt vor dem Aufruf von $form->isValid(). Im letzten Schritt rufe ich dann $form->getData() auf und habe dann das Objekt, das ich benötige. Beim anschließenden Speichern werden dann auch wie gewünscht die jeweiligen Beziehungen erstellt/entfernt.

  2. #22
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Ja, ich habe bislang Probleme aufgrund von n:m-Beziehungen. Das Buch ist im Formular jedoch nicht das Problem, sondern die Autoren. Da kann ich bislang nur jeweils einen je Buch speichern.

    Ein Multiselect von Autoren führt jeweils zu merkwürdigen Ergebnissen. Wenn Du jedoch sagst, dass es definitiv auch mit einer n:m-Referenztabelle arbeitet, dann frag ich mich wo der Fehler ist.
    Deine Arbeitsweise hört sich ganz gut an, müsste aber trotzdem erstmal nachvollziehen, wo genau da nun der Fehler ist und es nicht auch funktioniert, wenn man den Hydrator im Formular im Anschluß an den Constructor einbindet (in dem ich den Objektmanager mitgebe).

    Ich fürchte das ich aktuell nicht die Zeit haben werde, dass nochmal aufzurollen. Aber ich behalte mir das aufjedenfall erstmal so im Hinterkopf.
    Geändert von Powers (09.10.2013 um 12:05 Uhr) Grund: Inhalt überarbeitet

  3. #23
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    Ich bin mir nicht sicher ob es das gleiche Thema ist, aber ich habe ein Problem mit dem Bereitstellen der Daten für ein Select-Feld mit Multioptions per ManyToMany-Relation.
    Die Rows werden ganz normal angezeigt, aber die Werte welche in der DB gesetzt sind werden nicht als "selected" markiert.

    PHP-Code:
    $this->setHydrator(new DoctrineHydrator($oObjectManager'User\Entity\User'))
             ->
    setObject(new User())
             ->
    setInputFilter(new InputFilter());
    $this->add(array(
                
    'name' => 'roles',
                
    'type' => 'DoctrineModule\Form\Element\ObjectSelect',
                
    'attributes' => array(
                    
    'multiple' => true,
                ),
                
    'options' => array(
                    
    'label' => 'form.player.role',
                    
    'object_manager' => $oObjectManager,
                    
    'target_class'   => 'User\Entity\Role',
                    
    'property' => 'description',
                    
    //'empty_option' => '-- auswählen --'
                
    )
            )); 
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  4. #24
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Es geht bei dir vermutlich um ein Formular, das zum Bearbeiten dient, bei welchem die Werte vorselektiert werden sollen, oder?

    Der Code sieht schon mal soweit korrekt aus. Aber wie sieht dein Controller aus? An irgendeiner Stelle musst du ja natürlich auch die Werte übergeben. Bei mir sieht die entscheidende Stelle folgendermaßen aus:

    PHP-Code:
    if ($prg === false) {
        
    $form->bind($entity);

    Entity wäre dann in dem Fall natürlich der User, den du dann vorher ausliest.

  5. #25
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    Ja richtig, es geht hierbei um ein Edit-Formular. Soweit passt es ja auch und funktioniert.
    Eben nur wenn ich die Rollen welche aus einem ManyToMany von Doctrine anzeigen möchte bekomm ich diese Notices.
    Ich habs jetzt auch mit Checkboxen versucht, selber Fehler, die Checkboxen werden allerdings angezeigt, nur nicht richtig vorausgewählt.
    Code:
    Notice:  Object of class User\Entity\Role could not be converted to int in /var/www/marcus/adl_zf2/dartliga/vendor/zendframework/zendframework/library/Zend/Form/View/Helper/FormMultiCheckbox.php on line 205
    
    Notice:  Object of class DoctrineORMModule\Proxy\__CG__\User\Entity\Role could not be converted to int in /var/www/marcus/adl_zf2/dartliga/vendor/zendframework/zendframework/library/Zend/Form/View/Helper/FormMultiCheckbox.php on line 205
    
    Das Formular setzte ich ganz normal mit:
    PHP-Code:
    $oPlayerForm = new PlayerForm($oEm);
    $oUserEntity $oService->getSinglePlayer($aPost['pid']);$oPlayerForm->bind($oUserEntity); 
    Geändert von KnechtRootRecht (06.11.2013 um 15:55 Uhr)
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  6. #26
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    So, nach endloser google und mailinglisten sowie github suche und SOF bin ich durch einen einfachen Versuch zum richtigen Ergebniß gekommen.
    Es lag am Modul "BjyAuthorize" welches das User-Entity als Vorgabe hatte.
    Folgende Methode erzeugte den Fehler/Notice:
    PHP-Code:
    /**
    * Get role.
    *
    * @return array*/ 
    public function getRoles() {
          return 
    $this->roles->getValues();
     } 
    ich habe zum testen nur die Eigenschaft verwendet und somit wurden die Checkboxen richtig gecheckt und die Notices sind auch verschwunden:
    PHP-Code:
    /**
    * Get role.
    *
    * @return array*/
     
    public function getRoles() {
          return 
    $this->roles;
     } 
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  7. #27
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Hallo!

    Nach einiger Zeit habe ich nun mein ZF2 / Doctrine2-Projekt wieder hervorgeholt und nach einigem Testen hänge ich immernoch daran, dass ich mithilfe eines Multiple-Select-Field nicht mehrere Werte aufeinmal in der Datenbank speichern kann. Es wird immer nur das erste gespeichert.

    Und zwar habe ich die Relation nun in eine Unidirektionale ManyToMany-Relation mit einer seperation NM-Tabelle umgewandelt.

    PHP-Code:
    Entity/Book

         
    /**
         * @ORM\ManyToMany(targetEntity="Author", cascade="persist")
         * @ORM\JoinTable(name="books_authors",
         *         joinColumns={@ORM\JoinColumn(name="book_id", referencedColumnName="id")},
         *         inverseJoinColumns={@ORM\JoinColumn(name="author_id", referencedColumnName="id")}
         * )
         */
        
    private $authors;

        public function 
    __construct() {
            
    $this->authors = new \Doctrine\Common\Collections\ArrayCollection();
        }


        public function 
    addAuthors($author)
        {
            if (!
    $this->authors->contains($author)) {
                
    $this->authors->add($author);
            }
        }

        public function 
    removeAuthors($author)
        {
            if (
    $this->authors->contains($author)) {
                
    $this->authors->removeElement($author);
            }

            return 
    $this;
        } 
    Das Formular dazu habe ich nach Beispiel von KnechtRootRecht oben abgewandelt, und rufe nicht mehr direkt die Autoren-Entity auf, sondern die in Book erstellte Relation "Authors".

    PHP-Code:
    Fieldset/AuthorSelect

    parent
    ::__construct('authors');
            
    $this->setHydrator(new DoctrineHydrator($objectManager'Article\Entity\Bkbook'));
            
    $this->setObject(new \Article\Entity\Bkbook());

            
    $this->add(array(
                
    'type'    => 'DoctrineModule\Form\Element\ObjectSelect',
                
    'name'    => 'authors',
                
    'attributes' => array(
                    
    'multiple' => 'multiple',
                ),
                
    'options' => array(
                    
    'label'          => 'Buchautor/en',
                    
    'object_manager' => $this->getObjectManager(),
                    
    'target_class'   => 'Article\Entity\Bkauthor',
                    
    'value'             => 'id',
                    
    'property'       => 'lastname',
                    
    'empty_option'   => '--- bitte wählen ---',

                ),
            )); 

  8. #28
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Hallo allerseits!

    Nach einiger Zeit habe ich nun mein ZF2 / Doctrine2-Projekt wieder hervorgeholt und nach einigem Testen hänge ich immernoch daran, dass ich mithilfe eines Multiple-Select-Field nicht mehrere Werte aufeinmal in der Datenbank speichern kann. Es wird immer nur das erste Element eines Array's gespeichert.

    Und zwar habe ich die Relation nun in eine Unidirektionale ManyToMany-Relation mit einer seperation NM-Tabelle umgewandelt.

    PHP-Code:
    Entity/Book

         
    /**
         * @ORM\ManyToMany(targetEntity="Author", cascade="persist")
         * @ORM\JoinTable(name="books_authors",
         *         joinColumns={@ORM\JoinColumn(name="book_id", referencedColumnName="id")},
         *         inverseJoinColumns={@ORM\JoinColumn(name="author_id", referencedColumnName="id")}
         * )
         */
        
    private $authors;

        public function 
    __construct() {
            
    $this->authors = new \Doctrine\Common\Collections\ArrayCollection();
        }


        public function 
    addAuthors($authors)
        {
           foreach (
    $authors as $author) {
                
    $this->authors->add($author);
            }
            return 
    $this;
        }

        public function 
    removeAuthors($author)
        {
            if (
    $this->authors->contains($author)) {
                
    $this->authors->removeElement($author);
            }

            return 
    $this;
        } 
    Das Formular dazu habe ich nach Beispiel von KnechtRootRecht oben abgewandelt, und rufe nicht mehr direkt die Autoren-Entity auf, sondern die in Book erstellte Relation "Authors" (Code-Schnipsel oben).

    PHP-Code:
    Fieldset/AuthorSelect

    parent
    ::__construct('authors');
            
    $this->setHydrator(new DoctrineHydrator($objectManager'Article\Entity\Book'));
            
    $this->setObject(new \Article\Entity\Book());

            
    $this->add(array(
                
    'type'    => 'DoctrineModule\Form\Element\ObjectSelect',
                
    'name'    => 'authors',
                
    'attributes' => array(
                    
    'multiple' => 'multiple',
                ),
                
    'options' => array(
                    
    'label'          => 'Buchautor/en',
                    
    'object_manager' => $this->getObjectManager(),
                    
    'target_class'   => 'Article\Entity\Author',
                    
    'value'             => 'id',
                    
    'property'       => 'lastname',
                    
    'empty_option'   => '--- bitte wählen ---',

                ),
            )); 
    Als ich den FormularSelect so umgebaut habe, hat mich Doctrine zunächst darauf aufmerksam gemacht, dass ich sowohl eine addAuthors, als auch eine removeAuthors-Methode benötige, wenn ich so arbeiten will. Also habe ich diese (wie im ersten Codeschnipsel zu sehen) auch eingefügt. Macht ja Sinn.

    Dann bekomme ich den Fehler "Found entity of type Article\Entity\Book on association Article\Entity\Book#authors, but expecting Article\Entity\Author". Ich verstehe, dass Doctrine gerne ein Objekt vom Typ Author hätte - aber er bekommt ja mit "authors" eine ArrayCollection, wovon jedes Element von entsprechenden Typ ist. Muss man Doctrine da noch an entsprechender Stelle darauf hinweisen, damit es damit umgehen kann?
    Geändert von Powers (14.10.2014 um 14:32 Uhr) Grund: Korrektur Fehlerdarstellung

  9. #29
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Ah okay, habe mein Problem nun selbst lösen können. Habe alles nochmal aufgerollt und damals bei der Umsetzung wohl ein paar Ungereimtheiten im Detail eingebaut, die das Formular im groben nicht crashen lassen, aber bei sowas dann eben Probleme machten. Nun geht es wie von Zauberhand.

    Ich habe ua.a:
    - Datenbank NM-Tabelle geglättet (index-unique-Kram)
    - Fieldset für Select von "Authors" aufgelöst und eine Ebene höher nach "Book" verschoben
    - Hydratoren überarbeitet (hatte irgendwo noch einen ZendForm-Hydrator, dabei benötige ich überall DoctrineHydrator)

    Ich habe das Thema hier mal abonniert. Falls mal jemand an der ZF2 / ZendForm / Doctrine2-Kombination-Umsetzung hängt - einfach hier die Frage im Thread stellen. Ich werde dann gerne versuchen zu helfen.
    Geändert von Powers (14.10.2014 um 17:59 Uhr)

Seite 2 von 2 ErsteErste 1 2

Ähnliche Themen

  1. Form mit Doctrine 2 Entity verbinden
    Von roman1983 im Forum ZF2 Formulare
    Antworten: 2
    Letzter Beitrag: 12.03.2013, 17:08
  2. Doctrine 2 Entity testen
    Von laubegaster im Forum ZF2 DB
    Antworten: 4
    Letzter Beitrag: 05.03.2013, 15:06
  3. Antworten: 1
    Letzter Beitrag: 04.03.2013, 19:38
  4. Doctrine 2 Entity erweitern um Werte die nicht in der DB stehen
    Von claudia.sagner im Forum 3rd Party Tools
    Antworten: 2
    Letzter Beitrag: 23.01.2013, 11:38
  5. Doctrine 2 Entity erweitern um Werte die nicht in der DB stehen
    Von claudia.sagner im Forum ZF2 Einsteigerfragen
    Antworten: 0
    Letzter Beitrag: 22.01.2013, 17:10

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •