2012-01-13 37 views
0

我一直在努力去實現一個多模塊的ZF應用程序。我發現了一大堆關於多模塊應用程序的資源,事實上在整個模塊中,事情並不盡如人意。我得出的結論是,對於我們將要使用的特定實現,我所讀過的所有現有方法都有一些缺點,這對我們來說是一個阻礙,所以我開始思考問題。Zend Framework多模塊子域獨立引導使用環境變量和調整index.php

我想出了一個可行的解決方案,並允許多模塊隔離引導,但我想從一些ZF專家那裏得到一些關於這樣做是否存在潛在的不可預見情況的輸入。

基本域是example.org。我也有admin.example.org,dashboard.example.org和api.example.org。我希望每個這些子域映射到它的同名模塊(子域管理員映射到模塊管理員等)。我將Apache虛擬主機的子域配置爲serveraliases。

然後,我還定義了以下內容:

SetEnvIf Host ^admin* MODULE_TO_USE=admin 

然後,在index.php中,我有以下幾點:

/** Zend_Config_Ini */ 
require_once 'Zend/Config/Ini.php'; 

$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV); 
$config = $config->toArray(); 

$module = $config['resources']['frontController']['defaultModule']; 
if(getenv('MODULE_TO_USE')) { 
    $module = getenv('MODULE_TO_USE'); 
    $config['resources']['frontController']['defaultModule'] = $module; 
} 
$module = ucfirst($module); 
$config['bootstrap']['path'] = APPLICATION_PATH . "/{$module}_Bootstrap.php"; 

/** Zend_Application */ 
require_once 'Zend/Application.php'; 

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    $config 
); 
$application->bootstrap() 
      ->run(); 

然後,而不是通常的bootstrap.php文件,我有Default_Bootstrap.php,Admin_Bootstrap.php等等等等......據我所知,因爲在這種情況下,模塊直接映射到子域,然後使用邏輯來檢查虛擬主機conf(或.htaccess中的那些命名子域,就此而言)不應該破壞任何東西。但我不是ZF大師,所以我不能確定。

我會很感激任何反饋意見。 (注意:我知道它們不是「真正的」子域名,只是服務器別名,但我稱它們爲子域名以協助將來的搜索,因爲大多數人會搜索「子域名」而不是「serveralises」 )

+0

......或者說,看這個另一種方式,就是你是「中」取其模塊,是默認的模塊... – 2012-01-13 17:55:28

回答

0
+0

是的,我也看到了。但它不提供無污染的自舉方法。如果我有10個模塊引導程序,它們都將被引導。在我們的情況下,我們需要模塊隔離。我的問題不是ZF認可的方法,而是我上面概述的方法有什麼缺點,會在未來跳起來讓我們陷入困境。 – 2012-01-15 09:39:48

+0

我在引導太多模塊時遇到了同樣的問題,避免它的最好方法是在前端控制器上使用addControllerDirectory添加各個模塊,而不是使用addModuleDirectory。我只能說我更喜歡這種方式,你會避免使用很多引導程序和重複代碼,但如果它適合你,那就沒問題。 – Ashley 2012-01-15 10:15:58