我正在爲登錄用戶創建一個表單來更改其密碼,所以我創建了一個現有密碼重置表單的子類,這個表單可用。除了現有密碼的附加字段之外,這些表單將是相同的。目前爲止,除了我無法找到手動設置新字段順序的方式外,我得到它的唯一地方是在表格的末尾。看起來,ZF2需要你按照你希望渲染的順序來創建表單元素add()
。我會這樣做,除了子類窗體的構造函數必須在父窗體的構造函數添加新字段之前,父窗體已經添加了它的字段。ZF2窗體:自定義元素的順序
我已經嘗試設置屬性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,
)
));
}
父類的構造片段:
class ResetPassword extends Form implements InputFilterProviderInterface {
public function __construct() {
parent::__construct('reset-password');
$this->add(array(
'type' => 'Zend\Form\Element\Password',
'name' => 'password',
...
謝謝,這是訣竅!我不得不將優先級改爲更高的優先級。我編輯了你的答案以反映這一點。如果你發現這在文檔的某個地方,請發佈一個鏈接,如果你不介意:) – AlexMA 2014-09-12 17:01:06
我實際上是通過(驚嚇恐怖!)閱讀代碼找到它的。 Form類擴展了Fieldset類,而add()方法調用了它的父方法。之後,檢查方法,你會發現這些行 - > https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Fieldset.php#L187-L189 – Crisp 2014-09-12 17:20:22