Отображение поля формы Zend в столбцы БД - PullRequest
0 голосов
/ 21 октября 2009

У меня есть Zend_Form

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

и когда я выкидываю значения формы, я получаю строковый массив

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) ""
}

Форма имеет то же количество полей, что и моя таблица БД, определение таблицы БД:

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;

В данный момент я получаю ошибку отображения, поскольку столбец событий БД не может принимать строку, и то же самое с колонкой dateofbirth

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

Мне не нужно вручную создавать новый массив и сопоставлять каждое поле формы с правильным типом по имени - это кажется болью Есть ли более умный способ сделать это отображение в Zend?

1 Ответ

1 голос
/ 21 октября 2009

Именно поэтому в новой версии ZF используется шаблон DataMapper для подобных вещей, вы полностью абстрагируетесь от того, как устанавливать, сохранять и извлекать данные.

Лучше всего создать новый класс и затем взаимодействовать с этим классом, а внутри этого класса взаимодействовать с вашим классом DbTable.

...