代码之家  ›  专栏  ›  技术社区  ›  emeraldjava

Zend表单字段映射到DB列

  •  0
  • emeraldjava  · 技术社区  · 16 年前

    我有一张Zend_表格

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

    该表单的字段数与my DB table相同,DB table 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;
    

    我现在得到一个映射错误,因为DB事件列不能接受字符串,并且 与“出生日期”列相同

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

    我不想手动创建一个新数组,并通过名称将每个表单字段映射到正确的类型-it 好像很痛。在Zend中有没有更聪明的方法来进行这种映射?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Chris    16 年前

    这就是为什么在新的ZF版本中使用DataMapper模式处理类似的事情,您完全抽象了如何设置、保存和检索数据。

    最好的方法是创建一个新类,然后与该类交互,然后该类在内部与DbTable类交互。