【问题标题】:Bulk user creation in Zend Framework. Already have single user creation for workingZend 框架中的批量用户创建。已经有单用户创建工作
【发布时间】:2011-02-21 16:19:13
【问题描述】:

我正在使用 Zend Framework 我有一个允许我创建用户的表单。它具有所有必要的验证,并且运行良好。

我的任务是创建一个页面,允许我通过一次提交创建多达 25 个新用户。

示例:

  • 称呼/名字/姓氏/电子邮件
  • 称呼/名字/姓氏/电子邮件
  • 称呼/名字/姓氏/电子邮件
  • 称呼/名字/姓氏/电子邮件

如何利用我为单个用户创建的表单并允许每个新用户分别获得验证?

是否有某种方法可以拥有一组表单或其他可以实现相同目的的方法?

【问题讨论】:

    标签: php validation zend-framework zend-form


    【解决方案1】:

    试试这样的东西(未经测试):

    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() 调用会发生什么。

    【讨论】:

    • 感谢您花时间如此深入。我正在路上。谢谢。
    猜你喜欢
    • 2021-01-17
    • 2016-07-17
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2011-10-05
    • 2015-08-23
    相关资源
    最近更新 更多