Zend framework2 在ZF2路由器配置中,在主机名下配置子路由的正确方法是什么?

Zend framework2 在ZF2路由器配置中,在主机名下配置子路由的正确方法是什么?,zend-framework2,Zend Framework2,场景: 有一个名为fabric的zf2应用程序,它包括两个名为“bike”和“car”的不同模块,并通过以下url结构提供类似(但不相同)的功能: +------------------+-------+-------------------------+-------------+-----------------+--------+ | Hostname | Part | Page | Module | Controlle

场景:

有一个名为fabric的zf2应用程序,它包括两个名为“bike”和“car”的不同模块,并通过以下url结构提供类似(但不相同)的功能:

+------------------+-------+-------------------------+-------------+-----------------+--------+
|     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',
               ),
            )
         )
       )
     );
    

问题和疑问

关于zf2的路由类,如hostname、segment、literal和regex,web上有足够多的文档,但没有关于如何配对并一起使用这些奇妙的类


除了将所有应用程序源代码复制到单独的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
     )
   )
 );