zend(1.11)の代替クラス実装を読み込む

オートローダーを使用して既存のクラス定義をオーバーライドすることは可能ですか?ローダはまず自分のコードを見つけ、zendライブラリコードの代わりにロードしますか?私自身の Zend_View_Helper_FormText を記述し、すべてのテキスト Form_Elements に自動的にデフォルトのバージョンを取得させることができますか?

1

1 答え

更新:

だから、私はZFを使ってからちょっとしたことがあったので、私が正しいことを確認したかったのです。以下は私のために働いた。

「setHelperPaths」メソッドを使用して、または設定でそれを呼び出すために、 LIBRARY_PATH/YourNamespace/Application/Resource/View にカスタム YourNamespace_Application_Resource_View を作成します。

class YourNamespace_Application_Resource_View extends Zend_Application_Resource_View
{
   public function setHelperPaths($paths){
     if(!empty($paths)){
       $view = $this->getView();
       foreach($paths as $ns => $path) {
          $view->addHelperPath($path, $ns);
       }
     }
   }
}

あなたの設定で次のようなsometingを行います:

all:
  pluginPaths:
    'YourNamespace_Application_Resource_': <?php echo LIBRARY_PATH ?>/YourNamespace/Application/Resource

  resources:
    view:
      helperPaths:
        'YourNamespace_View_Helper': <?php echo LIBRARY_PATH ?>/YourNamespace/View/Helper

明らかに、これはあなたが既に設定した何かを完全に置き換えない...それに加えて。また、Zend_Toolに私のプロジェクトジェネレータを設定フォーマットとしてYAML(sfYaml)を使用するように設定していますので、INIやXMLを使用する場合は適切に変換する必要があります。

次に、上書きしているzendと同じ名前のcutsomヘルパーを作成します。テストでは次の例を使用しました。

// File in LIBRARY_PATH/YourNamespace/View/Helper/FormText.php
class YourNamespace_View_Helper_FormText extends Zend_View_Helper_FormText
{
   public function formText($name, $value = null, $attribs = null)
   {
      $xhtml = parent::formText($name, $value, $attribs);
      $xhtml .= '
'.__CLASS__.'
'; return $xhtml; } }

そしてそれは自動的に働いた。それがあなたのために働かないなら、それはおそらくそれに問題を与えるミックスに他の何かがあります。


なぜあなた自身の "ネームスペース"(例: Someguy_View_Helper_FormText )で独自の実装を作成して読み込むのですか? ヘルパーの上に置いた場合パススタックを使用すると、プラグインローダーは自動的にZendバージョンの代わりにそのプラグインを使用します。

それから、ヘルパーを引っ張るように、 Zend_Form_Decorator_ViewHelper をオーバーライドする必要があります。
追加された 著者 prodigitalson,
基本的には、ここで何を得るのかは、 Zend _ * を独自の実装に置き換えるのは悪いフォームなので、自分の名前空間にあるものを作成し、適切にロードする必要があります。あなたが置き換えるものによっては、デフォルトを過負荷にするのは面倒ですばやく簡単な作業かもしれませんが、間違った方法をとっているのはちょうど悪いフォームです。
追加された 著者 prodigitalson,
あなたは混乱して何を意味しますか?
追加された 著者 prodigitalson,
実際には重要です。なぜなら、HTML要素をラッピングする場合、フォーム要素に使用されるデコレータを変更することによってそれらを調整することができるからです。これは、フォームクラスの作成中にプログラムで行うことも、デフォルトのデコレータを設定する置換baeクラスを使ってZend_Formを拡張することも、フォームインスタンスを作成するときに設定を解析することによって行うこともできます。
追加された 著者 prodigitalson,
私はそれを試して、それを試して、それは箱から働いた...私は何をしたが、おそらくあなたはあなたがそれを構成する方法を投稿します。
追加された 著者 prodigitalson,
Zend_View_Helper_FormTextをロードする際に、Namespace_View_Helper_FormText以外のZend_View_Helper_FormTextをロードしようとしているため、異なる名前空間にある場合、zendはロードしようとしません。 Bootstrap.phpで$ view-> setHelperPath()を実行しても、Someguy_名前空間またはZend_名前空間を使用していないようです。
追加された 著者 Some Guy,
私はむしろそれを自分自身の名前空間に入れたいと思いますが、自動的にそのようにロードする方法はありませんか?私は、デフォルトのView_Helper_FormTextを、アプリケーション全体のすべての単一フォームのすべての要素で手作業で行う必要なく、出力をマングリングしないものに置き換えたいだけです。
追加された 著者 Some Guy,
それは問題ではない。 Zend_View_Helper_FormTextによって生成された出力は適切ではありません。私は必要な出力を生成するために_View_Helper_FormTextを書き換えました。自分のバージョンでデフォルトのZend_View_Helper_FormTextを上書きする方法を知ることができません。
追加された 著者 Some Guy,
問題のクラスが10行に似ていることを考えれば、明らかにそのコードを読み替えてコードを読んで、変更する必要があるものは既存のメソッドで変更することはできません。これは、formTextメソッドにハードコードされています。問題は「zendがデフォルトの代わりに置き換えクラスをロードする方法があるかどうか」です。この特定の例だけでなく、変更する必要があるものをzend実装がハードコードする場合にも適用されます。
追加された 著者 Some Guy,