2011-07-25 103 views
1

我想自动为我的Zend_Form元素添加前缀,这样我可以在POST表单时更容易将它们映射到我的模型上。例如,我有一个与两个模型相关的元素。Zend_Form元素的命名

我创建的形式,像这样:

$this->setMethod('post'); 

    $this->addElement('text', 'name', array(
     'label'  => 'Your Name', 
     'required' => true, 
    )); 

    $this->addElement('text', 'tel', array(
     'label'  => 'Your Telephone', 
     'required' => true, 
    ));  

    $this->addElement('text', 'email', array(
     'label'  => 'Your Email Address', 
     'required' => true, 
     'filters' => array('StringTrim','StringToLower'), 
     'validators' => array('EmailAddress'), 
    )); 

    $this->addElement('password', 'password', array(
     'label'  => 'Your Password', 
     'required' => true, 
    )); 

    $this->addElement('text', 'surgery_name', array(
     'label'  => 'Surgery Name', 
     'required' => true, 
    )); 

的问题是,手术名称字段需要与surgery_手动前缀。我最想做的是为第一组字段(比如User)设置一个前缀,然后为第二组字段(比如Surgery)设置一个前缀。

然后,我的元素名称看起来是这样的:

User.Name User.Email User.Tel

Surgery.Name

然后,当我来到地图他们到我的模型,应该更容易计算出哪些FORM字段映射。

+2

可能是子窗体一个很好的候选人? –

+0

我对子表格不太了解 - 是另一个Zend Framework类吗? –

+0

是的,我已经在答案中发布了更多信息和代码示例。 –

回答

4

这是子表单的设计目的。所以你的情况,你会怎么做:

$this->setMethod('post'); 

$user = new Zend_Form_SubForm(); 

$user->addElement('text', 'name', array(
    'label'  => 'Your Name', 
    'required' => true, 
)); 

$user->addElement('text', 'tel', array(
    'label'  => 'Your Telephone', 
    'required' => true, 
));  

$user->addElement('text', 'email', array(
    'label'  => 'Your Email Address', 
    'required' => true, 
    'filters' => array('StringTrim','StringToLower'), 
    'validators' => array('EmailAddress'), 
)); 

$user->addElement('password', 'password', array(
    'label'  => 'Your Password', 
    'required' => true, 
)); 

$this->addSubForm($user, 'user'); 


$surgery = new Zend_Form_SubForm(); 

$surgery->addElement('text', 'name', array(
    'label'  => 'Surgery Name', 
    'required' => true, 
)); 

$this->addSubForm($surgery, 'surgery'); 

表单元素将被命名为:user[name]user[tel]surgery[name]等等,所以它是那么容易拉出来的数据。你也可以单独验证表单,将它们分成独立的类(这样你可以将它们包含在其他表单中)以及其他一些东西。在手册中

更多信息:http://framework.zend.com/manual/en/zend.form.forms.html#zend.form.forms.subforms

1

有一件事我做我的,从形式到模型的能力,以帮助是做一个或两个以下

  • 用于从形式和名称的元素转换为/的 一贯创建功能形式(如果我有多个表格,出于某种原因编辑 相同的模型),并用它来返回模型对象
  • 创建一个构造函数或模型方法,将消耗后数组 并将其正确映射为以及toArraytoForm方法 将吐出可以使用的关联数组中的值 类似地