[英]ZF2 change extends class
我的問題ZF2 FormInput在驗證失敗時顯示錯誤類的答案是創建我自己的表單視圖幫助程序,以覆蓋render
函數。 盡管這對於使用forminput
渲染的元素效果forminput
,但是對於從forminput
繼承的元素forminput
。 例如, FormCheckbox
繼承自forminput
而不是MY forminput
:
<?php
namespace Zend\Form\View\Helper;
//...
class FormCheckbox extends FormInput {
//...
}
在這種情況下,我需要專門為formcheckbox
創建ANOTHER表單視圖幫助程序,以擴展MY forminput
。 對於其他我想包括的其他視圖助手( formdate
, formemail
, formpassword
等), formpassword
。
除了創建多個視圖助手以外,還可以創建一個視圖助手,並告訴ZF2在由ZF2視圖助手進行的所有原始視圖助手調用中使用它?
即\\Zend\\Form\\View\\Helper\\FormCheckbox
將擴展\\RPK\\Form\\View\\Helper\\FormInput
,這將擴展\\Zend\\Form\\View\\Helper\\FormInput
。
我能想到的解決方案是重寫自動裝帶器的一部分。
在自動加載功能中,添加了額外的檢查以檢查請求的類是否為\\Zend\\Form\\View\\Helper\\FormInput
,如果是這種情況,則加載自定義的FormInput。
在您自己的FormInput中,您無需擴展Zend FormInput,而是創建它的副本,並修改需要修改的部分。
除非ZF2在表單助手中使用依賴項注入,否則這是我能想到的唯一方法(無需更改基礎庫代碼)。
我用過的是局部視圖。 使用partials,您可以為每個輸入元素定義自己的html,並且可以訪問該輸入元素的所有屬性和消息(例如錯誤消息):
在您的部分phtml中:
<?php
$options = $element->getOptions();
$t = $this->t();
$value = $element->getValue();
$messages = $element->getMessages();
$attr = $element->getAttributes();
您可以使用這樣的部分:
$this->formRow($form->get('myelement'), null, null, 'mypartial');
我正在使用composer安裝ZF2。 當composer生成我的自動加載功能時,我可以在composer.json文件中指定一個自動加載路徑:
"autoload": {
"psr-4": {
"Zend\\Form\\View\\Helper\\": "vendor/rpk/Rpk/Form/View/Helper"
}
},
在查找zend文件夾之前,這將在我的供應商文件夾中搜索該類。
這不允許我擴展FormInput,而是在其位置調用FormInput。 對FormInput的調用擴展使應用程序陷入無限循環,因此我們需要將FormInput的內容復制到我的類中並在其中進行更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.