我正在使用Zend Framework我有一个允许我创建用户的表单。它具有所有必要的验证,并且运行良好。
我的任务是创建一个页面,允许我通过一次提交创建最多25个新用户。
示例:
如何利用我为单个用户创建的表单并允许每个新用户单独进行验证?
有没有办法让一组表格或其他东西能达到同样的效果?
答案 0 :(得分:3)
尝试这样的事情(未经测试):
class BulkUserForm extends Zend_Form
{
private $_howMany = 1;
public function __construct( $howMany, $options )
{
$this->_howMany = (int) $howMany;
parent::__construct( $options );
}
public function init()
{
for( $i = 1; $i <= $this->_howMany; $i++ )
{
$userForm = new YourOriginalUserForm();
$userForm->setElementsBelongTo( 'user' . $i ); // not sure this is actually necessary anymore, because of the second param to addSubForm
$this->addSubForm( $userForm, 'user' . $i, $i );
}
}
}
用法:
$form = new BulkUserForm( 25 /* [, $options ] */ );
echo $form;
// validation:
$form->isValid( $this->getRequest()->getPost() ); // or something similar
说明:
对子表单的setElementsBelongTo()
调用应创建与此类似的表示法(当然简化):
<input type="radio" name="user1[salutation]">
<input type="text" name="user1[firstName]">
<input type="text" name="user1[lastName]">
<input type="text" name="user1[email]">
您的表单应该能够在验证时自动识别提交的POST值。
当然你也应该考虑子表格的布局/装饰,但我会把它作为练习留给你。 ; - )
修改强>
抱歉,addSubForm()
的第二个参数是强制性的(现在添加它,并添加了可选的$order
参数)。我相信它也应该自动将子表单设置为属于正确的命名空间。虽然不完全确定。如果您忽略子表单上的setElementsBelongTo()
调用,请看看会发生什么。