1

ZendFrameworkとを使用するプロジェクトがありZend_Translateます。

標準のCSVアダプターをZend_Translateに少し変更する必要がありました。今、私はこの変更されたアダプターをどこに置くかという質問に直面しています。

デフォルトでは、アダプタはに保存されます

/Library/Zend/Translate/Adapter/Adaptername.php

これは私が新しいアダプターも置いた場所です。

ただし、カスタム拡張機能を使用してZendライブラリを「汚染」したくはありません。ファイルを失うことを心配せずにZFを更新できるようにしたいのです。中央にインストールされたバージョンのZFを引き続き使用できるようにしたいと思います。カスタムアダプタは、私が取り組んでいるプロジェクトの一部です。

これに対処する、または代替のロード場所を指定するZend Frameworkの方法はありますか?

言語アダプタは、を使用してロードされます

$this->_adapter = new $adapter($data, $locale, $options); 

(どこ$adapterになりますかZend_Translate_Adapter_Adaptername

そのため、標準の自動読み込みルールが適用されます。Zend Autoloaderに2番目の場所を探すように指示する簡単な方法はありますか?

4

2 に答える 2

5

あなたはそれをlibフォルダに追加することができます

/lib
 /Zend
  /Translate
   /Adapter
    /Csv.php
 /My
  /Translate
   /Adapter
    /Csv.php

オートローダーの設定方法に応じて、オートローダーを使用して「名前空間」を設定する必要があります。

$autoloader->registerNamespace('My_');

または、これが気に入らない場合は、modelsフォルダーに入れてください。基本的に、オートローダーが何らかの方法でアクセスできる限り、どこに置いてもかまいません。はZend_Autoloader任意のオートローダーコールバックを登録できるので、それは本当にあなた次第です。

于 2010-08-04T18:19:57.870 に答える
1

このサイトのルールのため、ゴードンの答えについてコメントすることはできませんが、彼はそれを正しく理解しています。アダプタのロード方法に関する質問に答えるには、完全なクラス名をtranslateオブジェクトのコンストラクタに渡す必要があります。

$ translate = new Zend_Translate('My_Translate_Adapter_Class'、...);

コンポーネントは、短い名前('gettext'など)を渡した場合に最初にZend名前空間をチェックインしますが、その後、アダプター名をクラスとして直接ロードしようとします。

少なくとも、これは1.10でも当てはまりますが、私はしばらくの間そうだったと思います。

于 2010-08-04T19:13:25.157 に答える