我正在为登录用户创建一个表单以更改其密码,因此我创建了一个现有密码重置表单的子类.除了现有密码的附加字段外,表单将完全相同.它到目前为止工作,除了我无法想出一种方法来手动设置新字段的顺序;我得到它的唯一地方是在表格的最后.似乎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
));
}
}