2017-01-18 8 views
0

私の質問ZF2 FormInput to show error class on validation failへの答えは、render関数をオーバーライド、自分のフォームビューヘルパーを作成することです。これはforminputを使ってレンダリングされる要素に対してはうまく機能しますが、forminputを継承する要素には役立ちません。たとえば、forminputではなく、MY forminputから、FormCheckbox継承:ZF2変更クラスを拡張

この場合
<?php 
namespace Zend\Form\View\Helper; 
//... 
class FormCheckbox extends FormInput { 
    //... 
} 

私はMY forminputを拡張するために専用のformcheckboxのための別のフォームビューヘルパーを作成する必要があります。また、他のビューヘルパーの場合は、(formdateformemailformpasswordなど)を含めたいと思います。

複数のビューヘルパーを作成する代わりに、単一のビューヘルパーを作成して、ZF2ビューヘルパーによって作成された元のビューヘルパーへのすべての呼び出しでそのビューヘルパーを使用するように指示できますか?

、つまり\Zend\Form\View\Helper\FormCheckbox\RPK\Form\View\Helper\FormInputとなり、これは\Zend\Form\View\Helper\FormInputに拡張されます。

答えて

0

私はZF2をインストールするためにコンポーザーを使用しています。作曲は私のautoload関数を生成しているとして、私はcomposer.jsonファイルに自動ロードパスを指定することができます。

"autoload": { 
    "psr-4": { 
     "Zend\\Form\\View\\Helper\\": "vendor/rpk/Rpk/Form/View/Helper" 
    } 
}, 

このZendのフォルダに探して前にクラスのための私のベンダーのフォルダを検索します。

これは、私がFormInputを拡張することはできませんが、代わりに私のFormInputを呼び出します。私のFormInputを呼び出すとアプリケーションが無限ループになるので、FormInputの内容を自分のクラスにコピーしてそこに変更を加える必要があります。

0

私が考えることができる解決策は、オートローダーの一部を書き換えることです。

自動ロード機能では、追加のチェックを追加して、要求されたクラスが\Zend\Form\View\Helper\FormInputであるかどうかを確認し、その場合はカスタムのFormInputをロードします。

独自のFormInputでは、Zend FormInputを拡張するのではなく、そのコピーを作成し、変更する必要がある部分を変更します。

ZF2がフォームヘルパーに依存性注入を使用していない限り、これは私が考えることができる(ベースライブラリコードを変更することなく)唯一の方法です。

0

私が使用したのはビューの一部です。パーシャルを使用すると、すべての入力要素のための独自の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');