[英]ZF2: Groups of modules
我正在學習ZF2並計划一個應用程序。
我想要一個帶有幾組模塊的應用程序。 每組模塊最多可包含20多個模塊。
我無法保證整個應用程序中任何模塊的唯一名稱,但是我可以保證它們在模塊組中的唯一性。
理想情況下,使用托管路由器將請求路由到模塊組。
例如http://admin.mysite.com/foo/ =>'Admin / Foo / Index / Index',
http://special.mysite.com/foo/ =>'Special / Foo / Index / Index'
想法#1
我希望為每個模塊組使用不同的module_path,並對模塊組周圍的模塊路徑命名,以確定模塊類的唯一性。 但是發送到module_autoloader的模塊似乎只注意傳遞的所有字符串的第一部分。
例如
array('modules' => array(
'Admin\Admin','Admin\Bob','Admin\Users'
));
這是我不理解的奇怪行為:
我已經通過對templateInjecter進行了一些小的改動來解決了這個問題,但是看起來很混亂。
想法2
只需在其子目錄前添加模塊名稱即可
namespace AdminAdmin\Controller,
class IndexController {}
思考
題:
我對您的問題的解釋是,您實際上是在問兩個問題:
ZF2本身可以做到這一點。 ZF2中的模塊基本上只是PHP命名空間,因此一個名為Foo\\Bar
的模塊是完全可以接受的,並且默認情況下,模塊加載器將在module/Foo/Bar
然后在vendor/Foo/Bar
查找其模塊類。
例如,如果要創建模塊Anvil並在名稱空間Acme下創建目錄module/Acme/Anvil
,然后在其中創建Module.php
文件:
<?php
namespace Acme\Anvil;
class Module
{
/* module class code goes here */
}
在應用程序的config/application.config.php
您可以將Acme\\Anvil
添加到modules
鍵中:
return array(
'modules' => array(
'Application',
'Acme\Anvil',
),
// Remaining bits of config array are unchanged
);
您可以采取的一種方法是修改站點的bootstrap index.php
以根據主機名即時修改配置。 例如,使用ZendSkeletonApplication,您可以像下面這樣設置application.config.php
文件:
<?php
return array(
'modules' => array(
'Application',
// Other modules common to all sites go here
),
'sites' => array(
'site-one.mydomain.com' => array(
'modules' => array(
'ModuleOne',
'ModuleTwo',
),
),
'site-two.mydomain.com' => array(
'modules' => array(
'ModuleThree',
),
),
),
// Remaining bits of config array are unchanged
);
為了完成這項工作,我們對public/index.php
進行了一些修改,以攔截從config/application.config.php
加載的配置數組,並重新配置modules
鍵:
// Pick host out of request
$hostname = $_SERVER['HTTP_HOST'];
// Load application configuration
$applicationConfig = require 'config/application.config.php';
// Merge site-specific modules into loaded modules array
$applicationConfig['modules'] = array_merge(
$applicationConfig['modules'],
$applicationConfig['sites'][$hostname]['modules']
);
// Run the application!
Zend\Mvc\Application::init($applicationConfig)->run();
這種方法提供了一種簡便的方法來更改為特定主機名加載的模塊,但可以輕松擴展以允許特定於站點的配置文件自動加載以及特定於站點的模塊目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.