J'ai un Zend_Form
$form = new My_Form();
$uploadedData = $form->getValues();
Zend_Debug::dump($uploadedData, $form->name,true)
et lorsque je récupère les valeurs du formulaire, j'obtiens un tableau de chaînes de caractères
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) ""
}
Le formulaire a le même nombre de champs que ma table de base de données, la définition de la table de base de données est la suivante
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;
J'obtiens une erreur de correspondance pour l'instant, car la colonne "DB event" ne peut pas prendre une chaîne de caractères, et il en va de même pour la colonne "dateofbirth", qui ne peut pas prendre une chaîne de caractères. même chose pour la colonne "date de naissance".
if($form->isValid($formData))
{
$logger->info("valid form");
$table = new Model_DbTable_Registration();
... // apply some custom mapping??
$table->insert($uploadedData);
...
}
Je ne veux pas avoir à créer manuellement un nouveau tableau et à associer chaque champ de formulaire au type correct par son nom - cela ne peut pas se faire sans un certain nombre d'opérations. Cela me semble pénible. Existe-t-il une manière plus intelligente de faire ce mapping dans Zend ?