加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

zend-framework – 如何生成表单子表单 – Zend Framework

发布时间:2020-12-13 22:09:34 所属栏目:PHP教程 来源:网络整理
导读:我有一个包含映射对象的所有字段的表单. 其中,我将在Form类中生成一个子表单. 我正在尝试通过displaygroup执行此操作,但是当调用控制器中的“子表单”时,标签表单不会生成. 我怎么解决? 谢谢 这是代码. ?php $username = new Zend_Form_Element_Text('user'
我有一个包含映射对象的所有字段的表单.
其中,我将在Form类中生成一个子表单.
我正在尝试通过displaygroup执行此操作,但是当调用控制器中的“子表单”时,标签表单不会生成.
我怎么解决?
谢谢

这是代码.

<?php
   $username = new Zend_Form_Element_Text('user');
   ...//param for field
   $password = new Zend_Form_Element_Password('pwd');
   ...//param for field
   $name = new Zend_Form_Element_Text('name');
   ...//param for field
   $submit = new Zend_Form_Element_Submit('submit');
   ...//param for field
   $this->addElement(array($user,$password,$name,$submit));
   $this->addDisplayGroup(array($user,$submit),'login');
   $this->addDisplayGroup(array($user,'create');
?>

解决方法

子表单与显示组不同. A subform是Zend_Form实例中嵌套的Zend_Form_SubForm实例.您可以使用它将一个表单嵌入另一个表单中.例如,您可能有一个用户配置文件表单和一个注册表单.在注册表单中,您可以输入配置文件值以及其他一些详细信息.因此,您可以将此配置文件表单用作嵌入在注册表单中的子表单.子表单主要用于DRY(不重复自己)原则或创建多页表单.

display group只是一些组合在一起的表单元素的直观表示.在html语法中,这称为字段集.主要目的是创建彼此属于的元素组.例如,在购物车中,您可能有发票地址组和送货地址组.这种显示组主要用于语义和视觉表示.

最大的区别在于,对于显示组,表单具有对这些表单元素的感知,因为对于子表单,表单不了解子表单的元素.这就是说,我注意到你要创建一个包含两个显示组的表单:一个是登录时,一个是创建(或注册)用户时.使用上面给出的内容,您无法使用显示组.一种选择是使用两个表单实例:

class LoginForm extends Zend_Form
{
    public function init ()
    {
        $this->addElement('text','user');
        $this->addElement('password','pwd');
        $this->addElement('submit','submit');
    }
}

class RegisterForm extends Zend_Form
{
    public function init ()
    {
        $this->addElement('text','pwd');
        $this->addElement('text','name');
        $this->addElement('submit','submit');
    }
}

如果要重用字段user和pwd,可能需要使用子表单:

class BaseForm extends Zend_Form_SubForm
{
    public function init ()
    {
        $this->addElement('text','pwd');
    }
}

class LoginForm extends Zend_Form
{
    public function init ()
    {
        $subform = new BaseForm;
        $this->addSubform($subform,'base');

        $this->addElement('submit','submit');
    }
}

class RegisterForm extends Zend_Form
{
    public function init ()
    {
        $subform = new BaseForm;
        $this->addSubform($subform,'base');
        $this->addElement('text','name');

        $this->addElement('submit','submit');
    }
}

在这两种情况下,您只需在控制器中实例化其中一个表单:

public function loginAction ()
{
    $form = new LoginForm();
    // More code here

    $this->view->form = $form;
}

public function registerAction ()
{
    $form = new RegisterForm();
    // More code here

    $this->view->form = $form;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读