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

Ale*_*xMA 4 php forms zend-framework2

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

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

子类构造函数代码段:

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,
        )
    ));
}
Run Code Online (Sandbox Code Playgroud)

父构造函数代码段:

class ResetPassword extends Form implements InputFilterProviderInterface {

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

        $this->add(array(
            'type' => 'Zend\Form\Element\Password',
            'name' => 'password',
            ...
Run Code Online (Sandbox Code Playgroud)

Cri*_*isp 6

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

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

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

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
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)