我想自动为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字段。
答案 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)
我做的一件事是帮助我从表单到模型的能力是做以下一个或两个
toArray
或toForm
方法
将吐出可以使用的关联数组中的值
类似