1

require_onceは正しいですか?どこにどのようにパスを含めますか?

それはapplication.iniまたはブートストラップにあるべきではありませんか?

例:

require_once 'Zend/View/Helper/Abstract.php';
// @question - is this correct - where and
// how would you put it include path

class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract
{
}
4

2 に答える 2

3

一般的に、をrequire_once適切に使用することで、ほぼ完全に呼び出しを回避できますZend_Loader_Autoloader。もちろん、鍵は「適切」です。

通常、はをフォルダにpublic/index.php設定include_pathlibraryます。次に、を使用している場合はZend_Application、が登録され、の配列を使用して名前空間プレフィックスが登録されているPSR-0準拠のクラスZend_Loader_Autoloaderが検索されます。autoloadernamespacesapplication/configs/application.ini

application/modelsトリッキーな部分は、に表示されるモデル、に存在するサービスなど、「include_pathに存在しない」ファイルで定義されたクラスの場合ですapplication/services。そこで定義されたクラスはPSR-0標準に従う傾向がありますが、 PSR-0マッピングは、インクルードパスから離れたベースに対して発生します。これは、システムがクラス名プレフィックスとベースパスの間のマッピングを認識している必要があることを意味します。これがリソースオートローダーZend_Application_Bootstrap_Bootstrapの出番です。これらのリソースオートローダーは通常、アプリケーションのブートストラップ拡張および拡張するモジュールブートストラップで自動的に設定されますZend_Application_Module_Bootstrap

ビューヘルパーは、「include_pathの外」にあるクラスのもう1つの例であり、おそらく。のようなものapplication/views/helpersです。これらは通常、短い形式を使用してビュースクリプトで呼び出されるため$this->someHelper($someParam)、この短い名前から完全修飾クラス名を生成する方法をシステムに通知する必要があります。これは、$view->addPrefixPath()名前空間プレフィックスをファイルシステムの場所にマップする方法を使用して実現されます。繰り返しになりますが、アプリレベルおよびモジュールレベルのブートストラップメカニズムにより、これらのほとんどが設定されます。

PSR-0標準に準拠していないライブラリ/クラスの場合、カスタムオートローダーを作成して(通常はBootstrapで)Zend_Loader_Autoloaderシングルトンに接続できます。これは、明示的なインクルード/リクワイアがある唯一の場所です。

include/requiretl; dr:既存のZFオートローダーメカニズムを適切に使用すれば、独自のアプリケーションコードにステートメントを含める必要はほとんどありません。

于 2012-06-07T13:59:53.193 に答える
-1

この場合は正しくありません。

まず、ZendToolを使用してください。それはあなたがあなた自身を作成する方法を知らないファイルを作成します。正しいクラス名を作成し、それらを適切に拡張し、require_once必要になる可能性のあるものはすべて作成します。

ブートストラップに入れないrequire_onceでください。すべてのリクエストではなく、必要な場合にのみ実行する必要があります。

提供した例の場合、正しいバージョンは次のようになります。

require_once "Zend/View/Interface.php";
class Zend_View_Helper_Foo extends Zend_View_Helper_Abstract {
}

ヘルパーによって拡張されたクラスは自動ロードされ、それを入れても何も起こりrequire_onceません。

于 2012-06-07T12:25:09.007 に答える