turk porno porno escort rokettube
Ergebnis 1 bis 16 von 16

Thema: Entities verbinden

  1. #1
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Entities verbinden

    Hallo zusammen,

    folgende Annahme:
    - Ich habe eine Form mit zwei Fieldsets, die jeweils eine Tabelle repräsentieren.
    - Die Daten der Tabelle lese ich mit je einem Tabellen-Gateway aus und erhalte zwei Result-Entities.
    - Diese beiden Entities möchte ich nun an eine Form binden, sodass sie mit den Fieldsets matchen.

    Funktioniert das irgendwie?

    Viele Grüße,
    fitti

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Ich habe eine Form mit zwei Fieldsets, die jeweils eine Tabelle repräsentieren.
    Du meinst, die „Fieldsets“ repräsentieren jeweils ein Datensatz aus der Datenbanktabelle. Richtig?

    Zitat Zitat von fitti70 Beitrag anzeigen
    Diese beiden Entities möchte ich nun an eine Form binden, sodass sie mit den Fieldsets matchen.
    Wenn du mal in den Quellcode von „Zend\Form“ schaust, dann wirst du feststellen, dass ein Objekt nicht an das Formular, sondern an ein „Fieldset“ gebunden wird.
    Und wenn du zwei „Fieldset“ und zwei Objekte hast, dann dürfte damit deine Frage beantwortet sein.
    Geändert von Kaiuwe (23.06.2015 um 15:47 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo,

    erstmal Danke für die Antwort und sorry, dass ich erst jetzt reagiere. Ich wurde gar nicht informiert.

    Zum Thema: die Objekte lassen sich zwar an die Fieldsets binden, aber die Values werden nicht übernommen. Ich komme einfach nicht weiter. Wie kann ich aus der Datenbank vorgegebene Werte an Fieldsets übergeben?

    VG
    Fitti

  4. #4
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    die Objekte lassen sich zwar an die Fieldsets binden, aber die Values werden nicht übernommen. Ich komme einfach nicht weiter.
    Veröffentliche doch mal bitte ein Beispiel mit Formular und deinen Objekten, damit es nachvollziehen kann. Es ist sehr mühselig alles selbst nachzubauen.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  5. #5
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Also zunächst einmal initialisiere ich zwei Fieldsets. Es handelt sich erstens um die Basisdaten von Mitgliedern, die in einer separaten Tabelle gespeichert werden.
    Eine weitere Tabelle enthält zweitens (optional) die Daten für eine jeweilige Microsite.
    Die Objekte, die mit setObjects an die Fieldsets gebunden werden, enthalten bereits alle Daten aus der Datenbank.
    Das Formular verknüpft die Daten aber leider nicht als Values für die Elemente der Fieldsets.
    Mit $form->bind() könnte ich zwar Daten zuweisen, aber eben nur einmal (also nur ein Objekt bzw. Entity).
    Wo ist mein Denkfehler?
    Code:
    public function getMemberFormFromDatabase($id)
    {
        $microFieldset = new MicropageFieldset('micropage');
        $memberFieldset = new MemberFieldset('member');
     $memberObject = $this->getMemberTable()->fetchSingleById($id); 
    $microObject = $this->getMicropageTable()->fetchSingleByMemberId($memberObject->getMitgliedId()); 
    $microObject = ($microObject) ? $microObject : new ClassMethods(); 
    $microFieldset->setHydrator(new Reflection())     ->setObject($microObject);
    $memberFieldset->setHydrator(new Reflection())     ->setObject($memberObject); 
    $form = new MemberAssembleForm(); 
    $form->add($memberFieldset); 
    $form->add($microFieldset);return $form;}
    VG fitti
    Geändert von fitti70 (08.07.2015 um 20:57 Uhr)

  6. #6
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Mit $form->bind() könnte ich zwar Daten zuweisen, aber eben nur einmal (also nur ein Objekt bzw. Entity).
    Wo ist mein Denkfehler?
    Schau dir mal folgenden Code an, dann wirst du feststellen, dass noch ein paar Schritte fehlen:

    Objekte und Container:
    PHP-Code:
    class Micro
    {
        private 
    $foo;

        public function 
    getFoo()
        {
            return 
    $this->foo;
        }

        public function 
    setFoo($foo)
        {
            
    $this->foo $foo;
        }
    }

    class 
    Member
    {
        private 
    $bar;

        public function 
    getBar()
        {
            return 
    $this->bar;
        }

        public function 
    setBar($bar)
        {
            
    $this->bar $bar;
        }
    }

    class 
    Container
    {
        public 
    $mircoFieldset;

        public 
    $memberFieldset;
    }

    // Objects
    $micro = new Micro();
    $micro->setFoo('123');

    $member = new Member();
    $member->setBar('456');

    $container                 = new Container();
    $container->mircoFieldset  $micro;
    $container->memberFieldset $member
    Formular und Fieldsets:
    PHP-Code:
    // Form
    $form = new \Zend\Form\Form();
    $form->setHydrator(new \Zend\Stdlib\Hydrator\ObjectProperty());
    $form->bind($container);

    // Hydrator
    $hydrator = new \Zend\Stdlib\Hydrator\ClassMethods();

    // Fieldset
    $fieldset1 = new \Zend\Form\Fieldset('mircoFieldset');
    $fieldset1->add(
        [
            
    'name' => 'foo',
            
    'type' => 'text',
        ]
    );
    $fieldset1->setObject(new Micro());
    $fieldset1->setHydrator($hydrator);

    $form->add($fieldset1);

    // Fieldset
    $fieldset2 = new \Zend\Form\Fieldset('memberFieldset');
    $fieldset2->add(
        [
            
    'name' => 'bar',
            
    'type' => 'text',
        ]
    );
    $fieldset2->setObject(new Member());
    $fieldset2->setHydrator($hydrator);

    $form->add($fieldset2); 
    Formular befüllen nach dem es abgesendet wurde:
    PHP-Code:
    if (count($_POST)) {
        
    /*
        Post sieht so aus:
        $_POST = [
            'mircoFieldset'  => ['foo' => 'abc'],
            'memberFieldset' => ['bar' => 'def'],
        ];*/

        // Validation
        
    $form->setData($_POST);
        
    $form->isValid();

    Ausgabe:
    PHP-Code:
    var_dump($container);
    var_dump($fieldset1->getObject());
    var_dump($fieldset2->getObject()); 
    Ergibt:
    Code:
    object(Container)[4]
      private 'mircoFieldset' => 
        object(Micro)[31]
          private 'foo' => string 'abc' (length=3)
      private 'memberFieldset' => 
        object(Member)[38]
          private 'bar' => string 'def' (length=3)
    object(Micro)[31]
      private 'foo' => string 'abc' (length=3)
    object(Member)[38]
      private 'bar' => string 'def' (length=3)
    Es entspricht dem Prinzip, wie es in der Doku beschrieben ist.

    (Eventuell habe ich noch etwas übersehen, aber momentan steht mir leider keine ordentliche IDE zur Verfügung.)
    Geändert von Kaiuwe (09.07.2015 um 16:10 Uhr) Grund: Container-Klasse vereinfacht
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  7. #7
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ich glaube, du hast mein Problem nicht verstanden oder ich stehe total auf dem Schlauch. Also in dem Beispiel werden die Values über setData() zugewiesen. In meinem letzten Post meinte ich übrigens auch $form->setData(), und nicht bind().

    Jetzt mal konkret nachgefragt:
    Kann ich den Fieldset Objekten direkt Values zuweisen (also nicht über form-setData())? Wenn ja, wie? Über $fieldset->setObject() scheint es jedenfalls nicht zu klappen.

    $fieldset->bindValues() akzeptiert nur Arrays. Ich habe es noch nicht probiert, vielleicht klappt es so. Dann müsste ich aber das Entity Objekt in ein Array extrahieren, damit es nachher wieder vom Fieldset in ein Objekt umgewandelt wird. Das kann es eigentlich auch nicht sein, oder?
    Viele Grüße,
    fitti
    Geändert von fitti70 (09.07.2015 um 16:03 Uhr) Grund: Fehler

  8. #8
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Ich glaube, du hast mein Problem nicht verstanden oder ich stehe total auf dem Schlauch.
    Ich denke schon.

    Zitat Zitat von fitti70 Beitrag anzeigen
    Also in dem Beispiel werden die Values über setData() zugewiesen.
    Leider falsch! Die Objekte „Micro“ und „Member“ haben schon Werte und diese werden mit „bind“, per Container-Objekt, an das Formular gebunden. Formular ist ausgefüllt.

    Zitat Zitat von fitti70 Beitrag anzeigen
    Kann ich den Fieldset Objekten direkt Values zuweisen (also nicht über form-setData())? Wenn ja, wie? Über $fieldset->setObject() scheint es jedenfalls nicht zu klappen.
    Brauchst du doch nicht, denn die Daten sind bereits schon da!

    Zitat Zitat von fitti70 Beitrag anzeigen
    Dann müsste ich aber das Entity Objekt in ein Array extrahieren, damit es nachher wieder vom Fieldset in ein Objekt umgewandelt wird. Das kann es eigentlich auch nicht sein, oder?
    Die Überlegung brauchst du nicht!

    „$form->setData“ wird erst nach dem Absenden eines Formulars benötigt. (Ich habe es oben nochmals verdeutlicht!)
    Geändert von Kaiuwe (09.07.2015 um 16:09 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  9. #9
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Das heißt, es fehlt einfach nur das Container Objekt?
    Es klappt aber noch nicht ganz. Ich probiere noch mal weiter und melde mich dann.

    Übrigens schon mal tausend Dank bis hierhin. O

    VG
    Fitti
    Geändert von fitti70 (09.07.2015 um 17:50 Uhr) Grund: Habe setHydrator vergessen

  10. #10
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Es klappt leider immer noch nicht, das Problem
    bleibt das gleiche.
    var_dump gekürzt:
    Code:
    object(Admin\Form\MemberAssembleForm)#381 (29) {
      ["attributes":protected]=>
      array(2) {
        ["method"]=>
        string(4) "POST"
        ["name"]=>
        string(15) "member-assemble"
      }
      ["bindAs":protected]=>
      int(17)
      ["bindOnValidate":protected]=>
      int(0)
      ["baseFieldset":protected]=>
      object(Admin\Form\MicropageFieldset)#337 (15) {
        ["factory":protected]=>
        NULL
        ["elements":protected]=>
        array(4) {
          ["tick"]=>
          object(Zend\Form\Element\Csrf)#412 (9) {
            ["attributes":protected]=>
            array(2) {
              ["type"]=>
              string(6) "hidden"
              ["name"]=>
              string(4) "tick"
            }
            ["csrfValidatorOptions":protected]=>
            array(0) {
            }
            ["csrfValidator":protected]=>
            NULL
            ["label":protected]=>
            NULL
            ["labelAttributes":protected]=>
            array(0) {
            }
            ["labelOptions":protected]=>
            array(0) {
            }
            ["messages":protected]=>
            array(0) {
            }
            ["options":protected]=>
            array(0) {
            }
            ["value":protected]=>
            NULL
          }
          ["text"]=>
          object(Zend\Form\Element\Textarea)#409 (7) {
            ["attributes":protected]=>
            array(3) {
              ["type"]=>
              string(8) "textarea"
              ["name"]=>
              string(4) "text"
              ["class"]=>
              string(8) "ckeditor"
            }
            ["label":protected]=>
            string(9) "Anreißer"
            ["labelAttributes":protected]=>
            array(0) {
            }
            ["labelOptions":protected]=>
            array(0) {
            }
            ["messages":protected]=>
            array(0) {
            }
            ["options":protected]=>
            array(0) {
            }
            ["value":protected]=>
            NULL
          }
          ["active"]=>
          object(Zend\Form\Element\Checkbox)#410 (11) {
            ["attributes":protected]=>
            array(3) {
              ["type"]=>
              string(8) "checkbox"
              ["name"]=>
              string(6) "active"
              ["class"]=>
              string(9) "col-xs-12"
            }
            ["validator":protected]=>
            NULL
            ["useHiddenElement":protected]=>
            bool(true)
            ["uncheckedValue":protected]=>
            string(1) "0"
            ["checkedValue":protected]=>
            string(1) "1"
            ["label":protected]=>
            string(5) "Aktiv"
            ["labelAttributes":protected]=>
            array(0) {
            }
            ["labelOptions":protected]=>
            array(0) {
            }
            ["messages":protected]=>
            array(0) {
            }
            ["options":protected]=>
            array(0) {
            }
            ["value":protected]=>
            NULL
          }
          ["langtext"]=>
          object(Zend\Form\Element\Textarea)#411 (7) {
            ["attributes":protected]=>
            array(3) {
              ["type"]=>
              string(8) "textarea"
              ["name"]=>
              string(8) "langtext"
              ["class"]=>
              string(8) "ckeditor"
            }
            ["label":protected]=>
            string(12) "Beitragstext"
            ["labelAttributes":protected]=>
            array(0) {
            }
            ["labelOptions":protected]=>
            array(0) {
            }
            ["messages":protected]=>
            array(0) {
            }
            ["options":protected]=>
            array(0) {
            }
            ["value":protected]=>
            NULL
          }
        }
        ["fieldsets":protected]=>
        array(0) {
        }
    Code:
      ["object":protected]=>  object(Admin\Form\Container)#389 (18) {
        ["microFiledset"]=>
        NULL
        ["memberFieldset"]=>
        NULL
        ["factory":protected]=>
        NULL
        ["elements":protected]=>
        array(0) {
        }
        ["fieldsets":protected]=>
        array(0) {
        }
        ["messages":protected]=>
        array(0) {
        }
        ["iterator":protected]=>
        NULL
        ["hydrator":protected]=>
        NULL
        ["object":protected]=>
        NULL
        ["useAsBaseFieldset":protected]=>
        bool(false)
        ["allowedObjectBindingClass":protected]=>
        NULL
        ["attributes":protected]=>
        array(0) {
        }
        ["label":protected]=>
        NULL
        ["labelAttributes":protected]=>
        array(0) {
        }
        ["labelOptions":protected]=>
        array(0) {
        }
        ["options":protected]=>
        array(0) {
        }
        ["value":protected]=>
        NULL
        ["mircoFieldset"]=>
        object(Admin\Model\MicropageEntity)#417 (5) {
          ["id":protected]=>
          string(1) "1"
          ["mitlgieder_2_id":protected]=>
          NULL
          ["text":protected]=>
          string(25) "Wir bringen Sie gro� raus"
          ["langtext":protected]=>
          string(1145) "
    Es gibt im Moment in diese Mannschaft, oh, einige Spieler vergessen ihnen Profi was sie sind. Ich lese nicht sehr viele Zeitungen, aber ich habe geh�rt viele Situationen. Erstens: wir haben nicht offensiv gespielt. Es gibt keine deutsche Mannschaft spielt offensiv und die Name offensiv wie Bayern.
    ..."
          ["active":protected]=>
          string(1) "1"
        }
      }
      ["useAsBaseFieldset":protected]=>
      bool(false)
      ["allowedObjectBindingClass":protected]=>
      NULL
      ["label":protected]=>
      NULL
      ["labelAttributes":protected]=>
      array(0) {
      }
      ["labelOptions":protected]=>
      array(0) {
      }
      ["options":protected]=>
      array(0) {
      }
      ["value":protected]=>
      NULL
    }

  11. #11
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Code:
    ["baseFieldset":protected]=> object(Admin\Form\MicropageFieldset)#337
    Wo und warum setzt du dieses Fieldset als Basis? (Es ist zwar in deinem ersten Code-Beispiel vorhanden, wird aber ansonsten dort nicht verwendet!)
    Geändert von Kaiuwe (09.07.2015 um 18:58 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  12. #12
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Es klappt aber auch nicht, wenn es nicht als basefieldset definiert ist.
    Hier mal der dump Ausschnit eines gekürzten Formulars. Das angehängte Objekt enthält alle Werte, im Formular werden sie aber nicht als value übernommen.
    Code:
    object(Admin\Form\MemberAssembleForm)#381 (29) {
      ["attributes":protected]=>
      array(2) {
        ["method"]=>
        string(4) "POST"
        ["name"]=>
        string(15) "member-assemble"
      }
      ["bindAs":protected]=>
      int(17)
      ["bindOnValidate":protected]=>
      int(0)
      ["baseFieldset":protected]=>
      NULL
      ["data":protected]=>
      NULL
      ["filter":protected]=>
      NULL
      ["useInputFilterDefaults":protected]=>
      bool(true)
      ["hasAddedInputFilterDefaults":protected]=>
      bool(false)
      ["hasValidated":protected]=>
      bool(false)
      ["isValid":protected]=>
      bool(false)
      ["isPrepared":protected]=>
      bool(false)
      ["preferFormInputFilter":protected]=>
      bool(true)
      ["hasSetPreferFormInputFilter":protected]=>
      bool(false)
      ["wrapElements":protected]=>
      bool(false)
      ["validationGroup":protected]=>
      NULL
      ["factory":protected]=>
      NULL
      ["elements":protected]=>
      array(0) {
      }
      ["fieldsets":protected]=>
      array(1) {
        ["micropage"]=>
        object(Admin\Form\MicropageFieldset)#337 (15) {
          ["factory":protected]=>
          NULL
          ["elements":protected]=>
          array(2) {
            ["text"]=>
            object(Zend\Form\Element\Textarea)#408 (7) {
              ["attributes":protected]=>
              array(3) {
                ["type"]=>
                string(8) "textarea"
                ["name"]=>
                string(4) "text"
                ["class"]=>
                string(8) "ckeditor"
              }
              ["label":protected]=>
              string(9) "Anreißer"
              ["labelAttributes":protected]=>
              array(0) {
              }
              ["labelOptions":protected]=>
              array(0) {
              }
              ["messages":protected]=>
              array(0) {
              }
              ["options":protected]=>
              array(0) {
              }
              ["value":protected]=>
              NULL
            }
            ["langtext"]=>
            object(Zend\Form\Element\Textarea)#409 (7) {
              ["attributes":protected]=>
              array(3) {
                ["type"]=>
                string(8) "textarea"
                ["name"]=>
                string(8) "langtext"
                ["class"]=>
                string(8) "ckeditor"
              }
              ["label":protected]=>
              string(12) "Beitragstext"
              ["labelAttributes":protected]=>
              array(0) {
              }
              ["labelOptions":protected]=>
              array(0) {
              }
              ["messages":protected]=>
              array(0) {
              }
              ["options":protected]=>
              array(0) {
              }
              ["value":protected]=>
              NULL
            }
          }
          ["fieldsets":protected]=>
          array(0) {
          }
          ["messages":protected]=>
          array(0) {
          }
          ["iterator":protected]=>
          object(Zend\Stdlib\PriorityList)#265 (5) {
            ["items":protected]=>
            array(2) {
              ["text"]=>
              array(3) {
                ["data"]=>
                object(Zend\Form\Element\Textarea)#408 (7) {
                  ["attributes":protected]=>
                  array(3) {
                    ["type"]=>
                    string(8) "textarea"
                    ["name"]=>
                    string(4) "text"
                    ["class"]=>
                    string(8) "ckeditor"
                  }
                  ["label":protected]=>
                  string(9) "Anreißer"
                  ["labelAttributes":protected]=>
                  array(0) {
                  }
                  ["labelOptions":protected]=>
                  array(0) {
                  }
                  ["messages":protected]=>
                  array(0) {
                  }
                  ["options":protected]=>
                  array(0) {
                  }
                  ["value":protected]=>
                  NULL
                }
                ["priority"]=>
                int(0)
                ["serial"]=>
                int(0)
              }
              ["langtext"]=>
              array(3) {
                ["data"]=>
                object(Zend\Form\Element\Textarea)#409 (7) {
                  ["attributes":protected]=>
                  array(3) {
                    ["type"]=>
                    string(8) "textarea"
                    ["name"]=>
                    string(8) "langtext"
                    ["class"]=>
                    string(8) "ckeditor"
                  }
                  ["label":protected]=>
                  string(12) "Beitragstext"
                  ["labelAttributes":protected]=>
                  array(0) {
                  }
                  ["labelOptions":protected]=>
                  array(0) {
                  }
                  ["messages":protected]=>
                  array(0) {
                  }
                  ["options":protected]=>
                  array(0) {
                  }
                  ["value":protected]=>
                  NULL ..
    [...]
    
          }
          ["hydrator":protected]=>
          object(Zend\Stdlib\Hydrator\Reflection)#417 (3) {
            ["strategies":protected]=>
            object(ArrayObject)#292 (1) {
              ["storage":"ArrayObject":private]=>
              array(0) {
              }
            }
            ["namingStrategy":protected]=>
            NULL
            ["filterComposite":protected]=>
            object(Zend\Stdlib\Hydrator\Filter\FilterComposite)#293 (2) {
              ["orFilter":protected]=>
              object(ArrayObject)#416 (1) {
                ["storage":"ArrayObject":private]=>
                array(0) {
                }
              }
              ["andFilter":protected]=>
              object(ArrayObject)#420 (1) {
                ["storage":"ArrayObject":private]=>
                array(0) {
                }
              }
            }
          }
          ["object":protected]=>
          object(Admin\Model\MicropageEntity)#266 (2) {
            ["text":protected]=>
            NULL
            ["langtext":protected]=>
            NULL
          }
          ["useAsBaseFieldset":protected]=>
          bool(false)
          ["allowedObjectBindingClass":protected]=>
          NULL
          ["attributes":protected]=>
          array(1) {
            ["name"]=>
            string(9) "micropage"
          }
          ["label":protected]=>
          NULL
          ["labelAttributes":protected]=>
          array(0) {
          }
          ["labelOptions":protected]=>
          array(0) {
          }
          ["options":protected]=>
          array(0) {
          }
          ["value":protected]=>
          NULL
        }
      }
              ["object":protected]=>
              object(Admin\Model\MicropageEntity)#266 (2) {
                ["text":protected]=>
                NULL
                ["langtext":protected]=>
                NULL
              }
              ["useAsBaseFieldset":protected]=>
              bool(false)
              ["allowedObjectBindingClass":protected]=>
              NULL
              ["attributes":protected]=>
              array(1) {
                ["name"]=>
                string(9) "micropage"
              }
              ["label":protected]=>
              NULL
              ["labelAttributes":protected]=>
              array(0) {
              }
              ["labelOptions":protected]=>
              array(0) {
              }
              ["options":protected]=>
              array(0) {
              }
              ["value":protected]=>
              NULL
            }
            ["priority"]=>
            int(0)
            ["serial"]=>
            int(0)
          }
        }
        ["serial":protected]=>
        int(1)
        ["isLIFO":protected]=>
        int(-1)
        ["count":protected]=>
        int(1)
        ["sorted":protected]=>
        bool(false)
      }
      ["hydrator":protected]=>
      object(Zend\Stdlib\Hydrator\ObjectProperty)#383 (3) {
        ["strategies":protected]=>
        object(ArrayObject)#385 (1) {
          ["storage":"ArrayObject":private]=>
          array(0) {
          }
        }
        ["namingStrategy":protected]=>
        NULL
        ["filterComposite":protected]=>
        object(Zend\Stdlib\Hydrator\Filter\FilterComposite)#391 (2) {
          ["orFilter":protected]=>
          object(ArrayObject)#384 (1) {
            ["storage":"ArrayObject":private]=>
            array(0) {
            }
          }
          ["andFilter":protected]=>
          object(ArrayObject)#390 (1) {
            ["storage":"ArrayObject":private]=>
            array(0) {
            }
          }
        }
      }
      ["object":protected]=>
      object(Admin\Form\Container)#389 (18) {
        ["microFiledset"]=>
        NULL
        ["memberFieldset"]=>
        NULL
        ["factory":protected]=>
        NULL
        ["elements":protected]=>
        array(0) {
        }
        ["fieldsets":protected]=>
        array(0) {
        }
        ["messages":protected]=>
        array(0) {
        }
        ["iterator":protected]=>
        NULL
        ["hydrator":protected]=>
        NULL
        ["object":protected]=>
        NULL
        ["useAsBaseFieldset":protected]=>
        bool(false)
        ["allowedObjectBindingClass":protected]=>
        NULL
        ["attributes":protected]=>
        array(0) {
        }
        ["label":protected]=>
        NULL
        ["labelAttributes":protected]=>
        array(0) {
        }
        ["labelOptions":protected]=>
        array(0) {
        }
        ["options":protected]=>
        array(0) {
        }
        ["value":protected]=>
        NULL
        ["mircoFieldset"]=>
        object(Admin\Model\MicropageEntity)#415 (2) {
          ["text":protected]=>
          string(25) "Wir bringen Sie gro� raus"
          ["langtext":protected]=>
          string(305) "
    Es gibt im Moment in diese Mannschaft, oh, einige Spieler vergessen ihnen Profi was sie sind. Ich lese nicht sehr viele Zeitungen, aber ich habe geh�rt viele Situationen. Erstens: wir haben nicht offensiv gespielt. Es gibt keine deutsche Mannschaft spielt offensiv und die Name offensiv wie Bayern.
    "
        }
      }
      ["useAsBaseFieldset":protected]=>
      bool(false)
      ["allowedObjectBindingClass":protected]=>
      NULL
      ["label":protected]=>
      NULL
      ["labelAttributes":protected]=>
      array(0) {
      }
      ["labelOptions":protected]=>
      array(0) {
      }
      ["options":protected]=>
      array(0) {
      }
      ["value":protected]=>
      NULL
    }

  13. #13
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Es klappt aber auch nicht, wenn es nicht als basefieldset definiert ist.
    Wenn ich das richtig sehe, dann hast du dir mein Beispiel nicht genau angeschaut:

    • Formular hat zwei Fieldsets mit jeweils eigenen Elementen
    • Container-Objekt hat zwei Eigenschaften mit jeweils eigenen Objekten und ihren Eigenschaften


    Es erfolgt also ein Abbilden der Objekten auf das Formular mit Fieldsets. Dabei müssen natürlich die Namen passen:

    • die Namen der Eigenschaften des Container-Objekts entsprechen den Namen der Fieldsets
    • die Namen der Eigenschaften der untergeordneten Objekten entsprechen den Namen der Formularfelder


    Bei dir stimmt dies aber nicht, denn dein erstes Fieldset heißt „micropage“, aber im Container-Objekt heißt die Eigenschaft „microFiledset“.

    Schau daher bitte nochmals nach und vergleiche, nicht das ich etwas falsch herausgelesen habe.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  14. #14
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Die Änderung der Namen hat mich hier leider auch nicht weiter gebracht.
    Zur Vereinfachung und Fehlersuche nutze ich nur noch ein gekürztes Fieldset mit zwei Elementen und entsprechendem Entity.
    Code:
    
    use Zend\Form\Element\Text;
    use Zend\Form\Element\Textarea;
    use Zend\Form\Fieldset;
    
    
    
    
    class MicropageFieldset extends Fieldset implements MicropageFieldsetInterface
    {
    
    
        public function __construct($name, $options = array())
        {
            parent::__construct($name, $options);
                }
    
    
    
    
        public function initializeBase()
        {
    
    
            $this->addTextElement();
            $this->addLangtextElement();
    
    
        }
    
    
            /**
         * Add title element
         */
    
    
        public function addTextElement($name = 'text')
        {
            $element = new Textarea($name);
            $element->setLabel('Anreißer');
            $element->setAttribute('class', 'ckeditor');
            $this->add($element);
        }
    
    
        /**
         * Add content element
         */
        public function addLangtextElement($name = 'langtext')
        {
            $element = new Textarea($name);
            $element->setLabel('Beitragstext');
            $element->setAttribute('class', 'ckeditor');
            $this->add($element);
        }
    
    
    
    
    
    
    
    
    }
    Das Entity sieht entsprechend aus:
    Code:
    class Micro implements  MicropageEntityInterface {
    
    
    
    
    
    
        protected $text;
    
    
        protected $langtext;
    
    
    
    
        public function setText($text)
        {
            $this->text = $text;
        }
    
    
    
    
        public function getText()
        {
            return $this->text;
        }
    
    
        /**
         * Set Langtext
         *
         * @param string $langtext
         */
        public function setLangtext($langtext)
        {
            $this->langtext = $langtext;
        }
    
    
        /**
         * Get Langtext
         *
         * @return string $langtext
         */
        public function getLangtext()
        {
            return $this->langtext;
        }
    
    
    }
    Das Entity wird mir Daten gefüttert.
    Code:
    $micropageEntity = $this->getMicropageTable()->fetchSingleByMemberId($memberEntity->getMitgliedId());
    Das Containerobjekt bekommt die Daten; Fieldset wird initialisiert und übergeben.
    Code:
    $micropageFieldset = new MicropageFieldset('micropageFieldset');
    $micropageFieldset->initializeBase();
    
    
    $micropageFieldset->setHydrator(new ObjectProperty())
        ->setObject(new Micro());
    
    
    class Container
    {
        public $micropageFieldset;
        public $memberFieldset;
    
    
    }
    
    
    $form = new MemberAssembleForm();
            $form->setHydrator(new \Zend\Stdlib\Hydrator\ObjectProperty());
    
    
            $container                 = new Container();
    
    
            $container->micropageFieldset  = $micropageEntity;
            //$container->memberFieldset = $memberObject;
            $form->bind($container);
            $form->add($micropageFieldset);
            //$form->add($memberFieldset);
    echo "<pre>";
            var_dump($container);
            var_dump($micropageFieldset->getObject());
            var_dump($form->get('micropageFieldset')->get('langtext'));
            echo "</pre>";
            return $form;
        }
    --------
    
    
    Ausgabe:
    object(Admin\Form\Container)#372 (2) {
      ["micropageFieldset"]=>
      object(Admin\Model\Micro)#398 (2) {
        ["text":protected]=>
        string(25) "Wir bringen Sie gro� raus"
        ["langtext":protected]=>
        string(4) "TEST"
      }
      ["memberFieldset"]=>
      NULL
    }
    object(Admin\Model\Micro)#404 (2) {
      ["text":protected]=>
      NULL
      ["langtext":protected]=>
      NULL
    }
    object(Zend\Form\Element\Textarea)#392 (7) {
      ["attributes":protected]=>
      array(3) {
        ["type"]=>
        string(8) "textarea"
        ["name"]=>
        string(8) "langtext"
        ["class"]=>
        string(8) "ckeditor"
      }
      ["label":protected]=>
      string(12) "Beitragstext"
      ["labelAttributes":protected]=>
      array(0) {
      }
      ["labelOptions":protected]=>
      array(0) {
      }
      ["messages":protected]=>
      array(0) {
      }
      ["options":protected]=>
      array(0) {
      }
      ["value":protected]=>
      NULL
    }
    Steckt hier irgendwo ein Fehler?


    Hast du deinen Code eigentlich getestet?
    VG
    fitti

  15. #15
    Neuer Benutzer
    Registriert seit
    20.03.2015
    Beiträge
    12
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Nachdem ich dein Beispiel 1:1 übernommen habe und den Code schrittweise angepasst habe, konnte ich das Problem einkreisen und letztlich lokalisieren.
    Es muss bei getter- und setter-Entities an beiden Stellen, also sowohl beim Formular als auch beim Fieldset, der entsprechende Hydrator benutzt werden (in meinem Fall Reflection).
    Vielen Dank für die Hilfe. Zu dem Thema findet man im Netz fast gar nichts Auch Ralf Eggert hat Fieldsets eher spärlich behandelt, deshalb bin ich sehr dankbar für die Hilfe.
    VG
    fitti

  16. #16
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von fitti70 Beitrag anzeigen
    Es muss bei getter- und setter-Entities an beiden Stellen, also sowohl beim Formular als auch beim Fieldset, der entsprechende Hydrator benutzt werden (in meinem Fall Reflection).
    Richtig. Ich hatte in meinem Beispiel für das Container-Objekt den Hydrator „ObjectProperty“, denn der Container sollte sehr einfach sein.
    Für die beiden anderen Objekte habe ich den Hydrator „ClassMethods“, weil dieser wunderbar auf Getter- und Setter-Methoden passt.

    Zitat Zitat von fitti70 Beitrag anzeigen
    Zu dem Thema findet man im Netz fast gar nichts Auch Ralf Eggert hat Fieldsets eher spärlich behandelt
    Genau das Thema („Zend\Form - Form Collections“) wird doch in der Doku behandelt. Den direkten Link hatte ich bereits oben schon aufgeführt.

    Zitat Zitat von fitti70 Beitrag anzeigen
    deshalb bin ich sehr dankbar für die Hilfe.
    Kein Problem.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. pdf mit zend_pdf Verbinden
    Von pk67 im Forum MVC
    Antworten: 3
    Letzter Beitrag: 30.10.2013, 19:17
  2. 2 ACL's verbinden?
    Von Akido im Forum Auth
    Antworten: 5
    Letzter Beitrag: 06.02.2011, 01:35
  3. Zend zu Port 25 verbinden
    Von omex im Forum Web & Webservices
    Antworten: 2
    Letzter Beitrag: 11.08.2010, 17:35
  4. Zend_Navigation mit Zend_Acl verbinden?
    Von 1234d1 im Forum MVC
    Antworten: 0
    Letzter Beitrag: 18.06.2010, 14:45
  5. Formulare verbinden
    Von scripper im Forum Formulare
    Antworten: 3
    Letzter Beitrag: 26.04.2010, 17:10

Stichworte

Lesezeichen

Berechtigungen

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