2011-06-30 43 views
1

我已經在應用程序目錄中創建了一個插件目錄。如何加載Zend Framework插件?

目前我加載插件,像這樣:

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

我不得不這樣做,我就不必使用include函數?提前謝謝了。

回答

3

Zend_Loader_Autoloader_Resource允許您定義文件的路徑和類名之間的映射。這允許您自動加載其文件未存儲在包含路徑中的類。

通常情況下,你會用它建立了模型,表格等。特別是一些常見的映射子類Zend_Application_Module_Autoloader,它具有插件的條目。在引導,這將是這樣的:

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

了一個名叫Application_Plugin_MyPlugin類將駐留在文件application/plugins/MyPlugin.php英寸

在你的具體情況,它看起來像您使用的是空的命名空間。所以,你的是:

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

謝謝@大衛溫勞布你的迴應。有效。這可以通過application.ini完成嗎? Zend_Application_Module_Autoloader是否加載指定目錄中的所有PHP文件,或者只是將目錄添加到包含路徑中?如果我使用命名空間怎麼辦?那會有什麼不同? – ryy705

+0

您可以使用'application.ini'註冊插件,例如:'resources.frontController.plugins.accesscheck =「Application_Controller_Plugin_AccessCheck」'。但它只適用於沒有構造函數參數的插件。否則,您需要通過代碼實例化/註冊。它只會註冊你明確指定的插件,而不是文件夾中的所有插件。賦予資源自動加載器的名稱空間值 - 在這種情況下爲應用程序 - 是類名之間映射的一部分,以便加載和查找它們。 –

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 
    }  
} 

然後我在applicati添加它on.ini

resources.frontController.plugins.authcheck = Application_Plugin_AuthCheck 

現在它已在應用程序中註冊。

注:我用dispatchLoopStartup但這裏指定你可以使用其他功能:http://framework.zend.com/manual/en/zend.controller.plugins.html