Hallo zusammen,

ich habe momentan die Schwierigkeit in meinem Projekt ein Formular, welches ein Objekt aus der Datenbank mit Relationen zu anderen Db-Tabellen (die als fieldsets dargestellt werden) auszugeben.

Die Struktur ist folgende:

  • EmployeeForm
    • EmployeeFieldset (default) - bind employee object (db table `employee`)
      • BankFieldset - bind bank object (db table `bank`) 1:N Beziehung
      • weitere fieldsets


Das Formular wird validiert (Filter passen soweit), allerdings werden meine Fieldsets nicht befüllt.

Die Besonderheit ist, dass ich mein employee Objekt aus der Datenbank direkt mit Joins (wegen den Beziehungen) hole und somit das employee Objekt direkt auch eine Eigenschaft des bank Objekts bekommt. (Das ganze geschieht via custom Hydrator).

Ich habe bereits einige Threads hier im Forum ohne Erfolg gelesen.

Da ich ziemliche Schwierigkeiten habe meinen PHP Code hier einzufügen ("Post denied. New posts are limited by number of URLs it may contain and checked if it doesn't contain forbidden words."),
habe ich das ganze nun als Gist aufgesetzt.

Ich hoffe das ist in Ordnung und falls ich hier die Foren Richtlinie missachtet habe, bitte ich dem nachzusehen bzw. mir zu sagen, welche syntax spezifischen Zeichenketten hier als "böse" deklariert werden.

Link: https://gist.github.com/rogatec/a36c599bd5b8fe4d2c0a67cbb63f5e93

In diesem Gist könnt ihr alle relevanten Dateien vorfinden (1:1 wie bei mir, nur etwas gekürzt z.B. die ca. 20 anderen Eigenschaften vom Employee und einige Kommentare wurden auch der Übersichtlichkeit her entfernt.)
  • Model: Employee
  • Model: Bank
  • IndexController mit Factory
  • EmployeeForm mit Factory
  • EmployeeFieldset mit Factory
  • BankFieldset mit Factory


Die Ausgabe nachdem mein Formular als valide angesehen wird, sieht wie folgt aus:

Ausgabe \Zend\Debug\Debug::dump($this->form->getData());: (ebenfalls gekürzt)
PHP-Code:
object(Employee\Model\Employee)#433 (54) {
  
["id"] => int(1)
  [
"bankId"] => string(1"1"
  
["bank"] => object(Employee\Model\Bank)#633 (3) {
    
["id"] => string(1"1"
    
["name"] => string(16"Deutsche Bank AG"
    
["bic"] => string(11"DEUTDEFFXXX"
  
}

Hier sehe ich, dass das die Daten sind, die aus der Datenbank beim initialisieren geholt wurden - also NICHT meine geänderten Formular Inhalte.

Ausgabe \Zend\Debug\Debug::dump($request->getPost());:
PHP-Code:
object(Zend\Stdlib\Parameters)#125 (1) {
  
["storage":"ArrayObject":private] => array(3) {
    [
"employee"] => array(45) {
      [
"bank"] => array(1) {
          [
"beschreibung"] => string(1"2"
      
}
      [
"id"] => string(1"1"
    
}
    [
"csrf"] => string(65"984ec4556a2ce94c01c9fa83eafdb160-a2655b89457eee061e050d3098b4eb3d"
    
["submit"] => string(9"Speichern"
  
}

Anstatt beschreibung bei der Bank steht hier das englische Wort - hier meckert aber das vBulletin, daher meine deutsche Übersetzung - hoffentlich ist das nicht zu sehr verwirrend.


Wie man erkennen kann, hat der $_POST eine andere Bank genommen, da ich nicht wie in der Datenbank stehend die Deutsche Bank (ID:1) gewählt habe sondern eine Sparkasse.

Um Ratschläge wo der Haken sein könnte wäre ich sehr dankbar und hoffe, dass trotz der Vielzahl der Dateien & Codezeilen im Gist sich jemand die Mühe machen kann, sich das anzuschauen.