簡體   English   中英

ZF2更改擴展類

[英]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 對於其他我想包括的其他視圖助手( formdateformemailformpassword等), 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM