命名Zend_Form元素

时间:2011-07-25 16:02:54

标签: php zend-framework zend-form

我想自动为Zend_Form元素添加前缀,以便在POST表单时可以更轻松地将它们映射到我的模型上。例如,我有一个表单,其中包含与两个模型相关的元素。

我像这样创建表单:

    $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 :(得分: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 :(得分:1)

我做的一件事是帮助我从表单到模型的能力是做以下一个或两个

  • 创建一个函数,用于转换为表单和表单元素 从形式到形式一致(如果我有多种形式可以编辑 由于某种原因使用相同的模型并使用它来返回模型对象
  • 创建将使用post数组的构造函数或模型方法 并正确映射它以及toArraytoForm方法 将吐出可以使用的关联数组中的值 类似