Zend framework2 在ZF2路由器配置中,在主机名下配置子路由的正确方法是什么?
场景: 有一个名为fabric的zf2应用程序,它包括两个名为“bike”和“car”的不同模块,并通过以下url结构提供类似(但不相同)的功能:Zend framework2 在ZF2路由器配置中,在主机名下配置子路由的正确方法是什么?,zend-framework2,Zend Framework2,场景: 有一个名为fabric的zf2应用程序,它包括两个名为“bike”和“car”的不同模块,并通过以下url结构提供类似(但不相同)的功能: +------------------+-------+-------------------------+-------------+-----------------+--------+ | Hostname | Part | Page | Module | Controlle
+------------------+-------+-------------------------+-------------+-----------------+--------+
| Hostname | Part | Page | Module | Controller | Action |
+------------------+-------+-------------------------+-------------+-----------------+--------+
| www.fabric.dev | / | Company homepage | Application | IndexController | index |
| bikes.fabric.dev | / | Homepage for bikes | Bike | IndexController | index |
| bikes.fabric.dev | /list | Listing of bikes | Bike | ListController | list |
| cars.fabric.dev | / | Homepage for cars | Car | IndexController | index |
| cars.fabric.dev | /list | Listing of bikes | Car | ListController | list |
+------------------+-------+-------------------------+-------------+-----------------+--------+
所以
- 应用程序、自行车和汽车是不同的模块和名称空间
,\Application
\Bike
\Car
- http服务器上有3个vhost(www..cars..bikes..)指向同一目录:
/www/fabric.dev/public
- 每个模块在module.config.php文件中都有自己的路由定义,如下面的非工作示例:
// module/Application/config/module.config.php 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Hostname', 'options' => array( 'route' => 'www.fabric.dev', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller' 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ) ) ) );
除了将所有应用程序源代码复制到单独的vhost目录之外,是否有其他合适的方法使用路由器配置提供上述uri方案?您必须了解路由是如何工作的。路由基于密钥并包含一些选项。所有模块的所有配置(包括路由)都合并到一个配置阵列中 这意味着,如果您在应用程序中定义了路线
home
,然后在Bike中定义了相同的路线home
,则Bike将覆盖home from应用程序
最好也有基于名称空间的路由名称。因此,申请途径如下:
'router' => array(
'routes' => array(
'home' => array(
// config here
)
)
);
还有自行车路线
'router' => array(
'routes' => array(
'bike' => array(
// config here
)
)
);
注意第二个例子中从
home
到bike
的区别 单靠配置无法实现所需的路由。必须进行一些较低级别的检查,以根据主机名确定应该加载哪些模块路由。在路由阶段,这样做已经太晚了,它只是从所有模块中获取合并的路由,这将是自行车和汽车的组合,并使用home
路由和主机名从最后加载的模块中获取。实际上,我正在通过为相关主机名加载所需的模块来做同样的事情。常见的模块是应用程序,当我调用www.fabric.dev bike和car模块时没有加载,但当我调用bike.fabric.dev应用程序+bike模块时正在加载。在cars.fabric.dev上也有同样的想法,只是应用程序+汽车模块正在加载。什么是“一起使用”?我不明白这个问题?是否要在模块之间重复使用代码?为什么需要“复制所有代码”。根据您的评论,您是否希望延迟加载模块?
'router' => array(
'routes' => array(
'bike' => array(
// config here
)
)
);