0 votes

Zend Form Field Mapping To DB Columns (Mappage des champs de Zend Form vers les colonnes de la base de données)

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 ?

1voto

James Hyde Points 101

C'est pourquoi la nouvelle version de ZF utilise le modèle DataMapper pour des choses comme celle-ci, vous abstenez complètement comment définir, sauvegarder et récupérer les données.

La meilleure solution consiste à créer une nouvelle classe, à interagir avec cette classe et, en interne, à faire interagir cette classe avec votre classe DbTable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X