微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – ZF2表单:自定义元素的顺序

我正在为登录用户创建一个表单以更改其密码,因此我创建了一个现有密码重置表单的子类.除了现有密码的附加字段外,表单将完全相同.它到目前为止工作,除了我无法想出一种方法来手动设置新字段的顺序;我得到它的唯一地方是在表格的最后.似乎ZF2要求您按照想要呈现的顺序添加()表单元素.我会这样做,除了子类窗体的构造函数必须是父窗体的构造函数才能添加新字段,此时父窗体已经添加了它的字段.

我已经尝试设置我的新字段的属性顺序,但它不起作用;我尝试了几种不同的组合(经过大量搜索后,我无法在任何地方找到此功能的文档).

子类构造函数代码段:

class ChangePassword extends ResetPassword implements InputFilterProviderInterface {

public function __construct() {
    parent::__construct();

    $this->add(array(
        'type' => 'Zend\Form\Element\Password',
        'name' => 'existingPassword',
        'order' => 0,
        'options' => array(
            'label' => 'Existing Password',
            'order' => 0,
        ),
        'attributes' => array(
            'required' => 'required',
            'order' => 0,
        )
    ));
}

父构造函数代码段:

class ResetPassword extends Form implements InputFilterProviderInterface {

    public function __construct() {
        parent::__construct('reset-password');

        $this->add(array(
            'type' => 'Zend\Form\Element\Password',
            'name' => 'password',
            ...

解决方法:

您正在寻找影响元素顺序的键被命名为priority.

表单add()方法接受包含$flags的第二个数组,并且在此数组中必须添加优先级键/值对.

你的构造函数应该最终看起来像这样……

class ChangePassword extends ResetPassword implements InputFilterProviderInterface {

    public function __construct() {
        parent::__construct();

        $this->add(array(
            'type' => 'Zend\Form\Element\Password',
            'name' => 'existingPassword',
            'options' => array(
                'label' => 'Existing Password',
            ),
            'attributes' => array(
                'required' => 'required',
            )
        ), // add flags array containing priority key/value 
        array(
            'priority' => 1000, // Increase value to move to top of form
        ));
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐