2009-12-17 59 views
1

currelly我在一些項目上工作(基於ZF)和我想知道是否有可能關閉一個或多個模塊。關閉我的意思是ZF不會加載它。Zend Framework - 如何禁用一個或多個模塊

更準確地說,我想關閉其中一個正在退出的應用程序模塊。
讓我說我的應用程序包含一些由sombody其他編寫的模塊,我的時間beeing 我不想使用它。 我希望這個問題對你有意義。

-
最好的問候,
羅伯特

+0

你是指Zend Framework組件之一嗎?像Zend_Form?或您的應用程序的其中一個模塊? – 2009-12-17 15:02:51

+0

你對core_module有什麼瞭解?你能給個例子嗎? – 2009-12-17 16:38:38

回答

3

如果我理解正確的,你想禁止從您的網站模塊(視圖/控制器組),你可以註冊一個routeShutdown()FrontController插件檢查路由請求。如果它被禁用,那麼你將用戶重定向到一個錯誤控制器。

創建檢查插件如果請求的模塊被禁止

class MyDisabledModules extends Zend_Controller_Plugin_Abstract 
{ 
    protected $_disabled = array(
     'module1', 
     'module2', 
     'sales', 
    ); 


    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $module = $request->getModuleName(); 

     if (in_array($module, $this->_disabled)) { 
      $request->setModuleName('default') 
        ->setControllerName('disabled') 
        ->setActionName('index') 
        ->dispatched(false); 
     } 
    } 
} 

,然後在FrontController註冊它:

Zend_Controller_Front::getInstance() 
    ->registerPlugin(new MyDisabledModules()); 

您可以硬編碼禁用插件,您可以從獲取它們數據庫,一個XML,從你想要的一切。

+0

或多或少,這是我想達到的事情。謝謝 – Robert 2009-12-18 12:32:24

3

我認爲路易斯達米姆提出的是過分的和錯誤的。該插件將被稱爲每個電話不必要的。爲什麼要爲禁用模塊做東西?

我會做一個基於配置文件的檢測,其中只有活動模塊被實例化。

UPDATE 通常模塊實例化集體:

$front->addModuleDirectory('/path/to/application/modules'); 

但是你可以通過一個激活模塊之一,或者通過傳遞一個數組,只有你想要的最活躍者。

$front->setControllerDirectory(array(
    'default' => '/path/to/application/controllers', 
    'blog' => '/path/to/application/blog/controllers' 
)); 

如果使用Zend_application,我認爲你必須改變這條線在你的配置:第一種負載任何模塊可以在找到

resources.modules[] = 

resources.modules = admin 
resources.modules = news 

模塊文件夾,這是默認行爲。我還沒有和Zend Application一起工作,所以我不確定這一點,但一定有這樣的事情。

+0

在這種情況下,你會怎麼做?因爲我可以添加一個活動模塊列表,但最後我將不得不檢查被調用的模塊是否在白名單中(在配置文件中有正確的輸入)。 最好的問候, 羅伯特 – Robert 2009-12-19 11:43:06

+0

@Robert檢查更新 – 2009-12-19 12:52:56