2011-06-30 14 views
1

私はアプリケーションディレクトリにpluginsディレクトリを作成しました。Zend Frameworkプラグインをロードするにはどうしたらいいですか?

現在、私はそうのようなプラグインをロードしています:

protected function _initAccessCheck() 
{ 
    include('../application/plugins/AccessCheck.php'); 
    $fc = Zend_Controller_Front::getInstance(); 
    $fc->registerPlugin(new Plugin_AccessCheck()); 
} 

私はそうしなければならない私は、関数を含める使用する必要はありませんでしょうか?事前に多くの感謝。

答えて

3

Zend_Loader_Autoloader_Resourceでは、ファイルパスとクラス名の間のマッピングを定義できます。これにより、ファイルがインクルードパスに保存されていないクラスを自動ロードすることができます。

通常、モデル、フォームなどの共通のマッピングを設定するサブクラスZend_Application_Module_Autoloaderを使用します。特に、プラグイン用のエントリがあります。その後Application_Plugin_MyPluginという名前のクラスはファイルapplication/plugins/MyPlugin.phpに常駐します

protected function _initResourceLoader() 
{ 
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH, 
    )); 
    return $resourceLoader; 
} 

:ブートストラップでは、このようなものになるだろう。

特定の状況では、空の名前空間を使用しているようです。だからあなたのは次のようになります。

protected function _initResourceLoader() 
{ 
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => '', 
     'basePath' => APPLICATION_PATH, 
    )); 

    return $resourceLoader; 
} 

その後、あなたのプラグインクラスPlugin_AccessCheckがファイルapplication/plugins/AccessCheck.phpに常駐します。

だけのリソースローダが前を作成していることを確認し、あなたのプラグインを登録/インスタンス化します

protected function _initAccessCheck() 
{ 
    $this->booststrap('resourceLoader'); 
    $fc = Zend_Controller_Front::getInstance(); 
    $fc->registerPlugin(new Plugin_AccessCheck()); 
} 
+0

http://framework.zend.com/manual/en/zend.controller.plugins.htmlはあなたの応答をあなたに@デビッドWeinraubありがとうございます。出来た。これはapplication.iniで行うことができますか? Zend_Application_Module_Autoloaderは、指定されたディレクトリ内のすべてのPHPファイルをロードするか、インクルードパスに単にディレクトリを追加しますか?名前空間を使用していたらどうなりますか?どのような違いがありますか? – ryy705

+0

プラグインは 'application.ini'を使って' resources.frontController.plugins.accesscheck = "Application_Controller_Plugin_AccessCheck" 'のように登録することができます。しかし、それはコンストラクタparamsなしのプラグインに対してのみ機能します。それ以外の場合は、コードを使用してインスタンス化/登録する必要があります。明示的に指定するプラグインのみを登録し、すべてのプラグインはそのフォルダに登録しません。リソースオートローダーに与えられた名前空間の値 - この場合、 ''Application''は、ロードするクラス名とそれらを探す場所の間のマッピングの一部です。 –

3

私は次のように、プラグインを有効にするためのapplication.iniファイルを使用します。

についてたとえば、認証コントロールプラグインの場合、次のようになります。

class Application_Plugin_AuthCheck extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
    { 
     //check if user is logged in 
    }  
} 

次に、私はそれをアプリケーションに追加しますon.ini

resources.frontController.plugins.authcheck = Application_Plugin_AuthCheck 

これは現在アプリケーションに登録されています。

注:私はなdispatchLoopStartupを使用しますが、ここで指定されたとおり、あなたが別の関数を使用できます。

関連する問題