如何创建zend表单对象?

时间:2012-09-17 19:31:26

标签: zend-framework zend-form

在我的用户控制器中,我有一个editAction。以下声明来自editAction。

$form = $this->_getEditForm();//here I need to pass $user->email to the form class.

我在同一个控制器中有另一个类_gerEditForm()。

  private function _getEditForm()
   {
    $form = new Form_Admin_Users_Add(array(
            'method' => 'post',
            'action' => $this->_helper->url('edit', 'users'),

    ));
    return $form;
   }
enter code here

//表单类

class Form_Admin_Users_Add extends Form_Abstract
{

    public function __construct($mail=null)
    {
        parent::__construct();
        $this->setName('user');
        //$userId = new Zend_Form_Element_Text('userId');
        //$userId->addFilter('Int');
        //$this->addElement($userId);

        $this->setAttrib('id', 'addUserForm');
        $this->setAttrib('class', 'formInline');

        $firstName = new Zend_Form_Element_Text('firstName');
        $firstName->setRequired(true)
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty', false, array('messages'=>'First name cannot be empty'))
        ->addValidator('StringLength', false, array(1, 256))
        ->setLabel('First Name:');
        $this->addElement($firstName);

        $lastName = new Zend_Form_Element_Text('lastName');
        $lastName->setRequired(true)
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty', false, array('messages'=>'Last name cannot be empty'))
        ->addValidator('StringLength', false, array(1, 256))
        ->setLabel('Last Name:');
        $this->addElement($lastName);

        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('Email :')
        ->addValidator('NotEmpty', false, array('messages'=>'email cannot be empty'))
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('EmailAddress')
        ->addValidator(new BusinessForum_Validate_UniqueEmail($mail));

现在我需要传递表单类的电子邮件。但我不知道该怎么做。 请帮助我这方面。 谢谢

1 个答案:

答案 0 :(得分:1)

我有点困惑。 __construct函数接受一个参数$mail。你将它传递给你的BusinessForum_Validate_UniqueEmail班。

但是在你的_getEditForm函数中,你将一个数组传递给$mail参数,该参数看起来像是有表单设置,而不是电子邮件信息。

如果这就是你如何命名的东西,那就是它的工作原理,那很好。然后,您只需要在__construct函数中添加第二个参数:

public function __construct($mail=null, $emailAddress="")

_getEditForm函数传递进来:

private function _getEditForm($emailAddress="")
{
    $form = new Form_Admin_Users_Add(array(
        'method' => 'post',
        'action' => $this->_helper->url('edit', 'users')
    ), $emailAddress);
    return $form;
}

并将电子邮件地址传递给您的_getEditForm函数:

$form = $this->_getEditForm($user->email);