Question

j'ai un Zend_Form

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

et quand je vide les valeurs de formulaire, je reçois un tableau de chaînes

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 table de base de données def est

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;

Je reçois une erreur de mappage pour le moment, car la colonne d'événements de base de données ne peut pas contenir de chaîne, et idem avec 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 à mapper chaque champ de formulaire sur le type correct par son nom - il semble être une douleur. Existe-t-il un moyen plus intelligent de réaliser cette cartographie dans Zend?

Était-ce utile?

La solution

C’est pourquoi, sur la nouvelle version de ZF, le motif DataMapper est utilisé pour ce genre de choses, vous expliquez parfaitement comment définir, enregistrer et récupérer les données.

Votre meilleur choix est de créer une nouvelle classe, puis d'interagir avec cette classe, et en interne, cette classe interagit avec votre classe DbTable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top