Frage

Ich habe eine Zend_Form

$form = new My_Form();
$uploadedData = $form->getValues();
Zend_Debug::dump($uploadedData, $form->name,true)

und wenn ich die Form Werte Dump i erhalten ein String-Array

array(11) {
  ["event"] => string(2) "26"
  ["firstname"] => string(3) "sdf"
  ["surname"] => string(0) ""
  ["gender"] => string(1) "M"
  ["company"] => NULL
  ["dateOfBirth"] => string(10) "11-11-1977"
  ["address"] => string(6) "dfasdf"
  ["address2"] => string(4) "adfs"
  ["address3"] => string(4) "adfs"
  ["email"] => string(7) "x@x.com"
  ["mobile"] => string(0) ""
}

Die Form hat die gleiche Anzahl von Feldern, wie meine DB-Tabelle, die DB-Tabelle def ist

DROP TABLE IF EXISTS `registration`;
CREATE TABLE IF NOT EXISTS `registration` (
  `id` int(11) NOT NULL auto_increment,
  `event` int(11) NOT NULL,
  `firstname` varchar(50) NOT NULL,
  `surname` varchar(50) NOT NULL,
  `gender` varchar(5) NOT NULL,
  `dateofbirth` date NOT NULL,
  `address` varchar(50),
  `address2` varchar(50),
  `address3` varchar(50),
  `email` varchar(50) NOT NULL,
  `mobile` varchar(50),
  `company` int(11),
  `sector` int(11),
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Ich bin immer zur Zeit ein Mapping-Fehler, da die DB Ereignisspalte eine Zeichenfolge nicht nehmen kann, und gleiche mit der 'dateOfBirth' Spalte

if($form->isValid($formData))
{
    $logger->info("valid form");
    $table = new Model_DbTable_Registration();
    ... // apply some custom mapping??
    $table->insert($uploadedData);
    ...    
}

Ich möchte ein neues Array nicht müssen manuell erstellen, und jedes Formularfeld mit Namen auf den richtigen Typ der Karte - es scheint wie ein Schmerz. Gibt es einen intelligenten Weg, um diese Zuordnung in Zend zu tun?

War es hilfreich?

Lösung

Aus diesem Grund auf der neuen ZF-Version ist das DataMapper Muster für Dinge wie diese verwenden, können Sie abstrakt vollständig wie zu setzen, speichern und die Daten abgerufen werden.

Am besten ist es, eine neue Klasse zu erstellen und dann mit dieser Klasse interagieren, und intern mit Ihrer DbTable Klasse, die Klasse in Wechselwirkung treten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top