Mappatura dei campi modulo Zend su colonne DB
-
05-07-2019 - |
Domanda
Ho un Zend_Form
$form = new My_Form();
$uploadedData = $form->getValues();
Zend_Debug::dump($uploadedData, $form->name,true)
e quando scarico i valori del modulo ottengo un array di stringhe
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) ""
}
Il modulo ha lo stesso numero di campi della mia tabella DB, la tabella DB def è
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;
Al momento sto riscontrando un errore di mappatura, poiché la colonna degli eventi DB non può contenere una stringa e lo stesso con la colonna "dateofbirth"
if($form->isValid($formData))
{
$logger->info("valid form");
$table = new Model_DbTable_Registration();
... // apply some custom mapping??
$table->insert($uploadedData);
...
}
Non voglio creare manualmente un nuovo array e mappare ogni campo del modulo sul tipo corretto per nome - esso sembra un dolore. Esiste un modo più intelligente per eseguire questa mappatura in Zend?
Soluzione
Ecco perché nella nuova versione di ZF si utilizza il modello DataMapper per cose come questa, si riassume completamente come impostare, salvare e recuperare i dati.
La tua scommessa migliore è creare una nuova classe e quindi interagire con quella classe e internamente quella classe interagisce con la tua classe DbTable.