• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Fieldset - Dynamisch erweitern

N3X

New member
Hallo,
erst einmal einen guten morgen an die Community hier. Ich schlage mich seit einigen Stunden mit einem für euch vermutlich kleinen Problem rum.
Ich habe ein Formular, und in diesem Formular habe ich im Grunde genommen eine Wiederholungsgruppe, bzw. möchte ich diese haben. Dahingehend bin ich auf die Fieldsets / Collections gestoßen beim ZF2, und würde gern diese verwenden um ein Array von Datensätzen, welche x beliebig viele Werte beinhalten kann an meinen Controller weiterzugeben.

Konkret genommen geht es um die Hinterlegung von Rufnummern, ein User soll die Möglichkeit haben mehrere Rufnummern anzugeben, die Anzahl der Rufnummern ist nicht limitiert.
Demnach habe ich mich an folgendem Wiki-Eintrag orientiert:
Form Collections — Zend Framework 2 2.4.3dev documentation

Mein Problem ist das gesamte Konstrukt geht nicht auf. Im HTML-Dokument müsste im Template auch der Placeholder "__index__" angegeben sein, dieser fehlt mir.

Mein Sourcecode dazu sieht wie folgt aus:

Fieldset:
PHP:
namespace Voip\Form;


use Zend\Form\Fieldset;
use Zend\Form\Element\Text;
use Zend\Form\Element\Number;


class PhoneNumberFieldset extends Fieldset{
    
    public function __construct(){
        parent::__construct("Phone_Number");
        $oVorwahl = new Number("vorwahl");
        $oVorwahl->setLabel("porting_phone_prefix");
        $oElement = new Text("phoneNumber");
        $oElement->setLabel("porting_phone_number");
        $this->add($oElement);
        $this->add($oVorwahl);
    }




}
Collection:
PHP:
namespace Voip\Form;


use Zend\Form\Element\Collection;


class PhoneNumberCollection extends Collection{
    
    public function __construct(){
        parent::__construct("PhoneNumbers");
        
        $this->setCount(4);
        $this->setShouldCreateTemplate(true);
        $this->setAllowAdd(true);
        $this->setAllowRemove(true);
        $this->setTargetElement(new PhoneNumberFieldset());
    }
}
Form-Klasse:

PHP:
class PortingForm extends Form{        
       public function addPhoneNumberCollection(Collection $oCollection){        
              $oCollection->setUseAsBaseFieldset(true);       
              $this->add($oCollection);    
       }
Anschließend erzeuge ich die Formularklasse innerhalb einer Factoryklasse, da ich diese Klasse an einigen Stellen wiederholt mit anderen Feldern verwende.
Ich sehe abgesehen von der Form im Wiki kaum vergleichbare unterschiede, aber manchmal ist man ja etwas blind beim vergleichen. Mag mir jemand sagen wo mein Fehler liegt?

ZF in der Version 2.4 ist im Einsatz.
 
Zuletzt bearbeitet von einem Moderator:

Kaiuwe

Super-Moderator
Demnach habe ich mich an folgendem Wiki-Eintrag orientiert:
Form Collections — Zend Framework 2 2.4.3dev documentation
Das ist kein Wiki, sondern die Doku. Aber Vorsicht mit dieser Version, denn auf readthedocs.org ist nur eine vorab erstellte Entwicklerversion, welche nicht dem aktuellem Versionsstand entspricht. Hier können also Methoden oder Vorgehen enthalten bzw. beschrieben sein, die nicht im letztem Release enthalten sind!

Das ist die offizielle Doku: Programmer’s Reference Guide of Zend Framework 2 — Zend Framework 2 2.4.2 documentation - Zend Framework
 
Oben