我工作的一個項目ZF2 ZF2路由器的配置,我需要配置我的一些模塊在不同的子域工作的以下情形:處理多個子域
- 我有不同的模塊,如API,後端(管理員),應用(核心 模塊),博客等。
- 我有多個虛擬主機,它指向同一個 應用程序/ public目錄像api.foobar.com,admin.foobar.com
- 我使用的唯一每個模塊中的控制器鍵/別名,如下所示:
...
'controllers' => array(
'invokables' => array(
'home-controller' => 'Application\Controller\IndexController',
),
),
所以,我想基於域改變我的應用程序的行爲(主機名/ routeMatch),如果主機看起來像api.foobar.com我的默認控制器應該得到的形成寧靜控制器,如果它是一個通用的主頁請求,我認證的管理員控制器不應該調用,如果它是移動站點,則將家庭控制器更改爲移動控制器,利用不同的佈局等...
非工作配置(應用程序/ config/module.config.php):
return array(
'router' => array(
'routes' => array(
'home' => array(
'type' => 'hostname',
'options' => array(
'route' => 'www.foobar.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'home-controller',
'action' => 'index'
)
)
),
'api' => array(
'type' => 'hostname',
'options' => array(
'route' => 'api.foobar.com',
'constraints' => array(
'subdomain' => 'api',
),
'defaults' => array(
'__NAMESPACE__' => 'Api\Controller',
'controller' => 'api-controller',
'action' => 'index'
)
)
),
'admin' => array(
'type' => 'hostname',
'options' => array(
'route' => 'admin.foobar.com',
'constraints' => array(
'subdomain' => 'admin',
),
'defaults' => array(
'__NAMESPACE__' => 'Admin\Controller',
'controller' => 'admin-controller',
'action' => 'index'
)
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'__NAMESPACE__' => 'Admin\Controller',
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
),
'defaults' => array()
)
)
)
)
)
)
);
有趣的是,目前這個配置我得到一個404頁面沒有發現錯誤api.foobar.com,www.foobar.com和admin.foobar.com在我的開發環境和轉儲的路線如下:
object(Zend\Mvc\Router\PriorityList)[214]
protected 'routes' =>
array (size=3)
'home' =>
array (size=3)
'route' =>
object(Zend\Mvc\Router\Http\Hostname)[216]
...
'priority' => int 0
'serial' => int 0
'admin' =>
array (size=3)
'route' =>
object(Zend\Mvc\Router\Http\Part)[218]
...
'priority' => int 0
'serial' => int 1
...
'priority' => int 0
'serial' => int 2
protected 'serial' => int 3
protected 'count' => int 3
protected 'sorted' => boolean false
我在應用模塊> Module.php> onBootstrap($ E)方法簡單地得到這個轉儲: $路徑= $ E-> getApplication() - > getServiceManager->獲取('路由器「) - > getRoutes();
問題:
- 什麼不對這個CONFIGRATION?
- 爲什麼我的頂級管理路由列爲Zend \ Mvc \ Router \ Http \ Part?
- 我應該將路由定義分隔到本場景的每個模塊自己的module.config.php文件中嗎?