情景:
有一个名为fabric的zf2应用程序,其中包含两个名为" bike"和"汽车"并通过以下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
/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',
),
)
)
)
);
和
// module/Bike/config/module.config.php
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'bikes.fabric.dev',
'defaults' => array(
'__NAMESPACE__' => 'Bike\Controller'
'controller' => 'Bike\Controller\Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Literal',
'options' => array(
'route' => '/list',
'defaults' => array(
'controller' => 'Bike\Controller\List',
'action' => 'list',
),
),
),
),
),
)
)
问题和疑问
网上有足够的文档关于zf2的路由类,例如hostname,segment,literal和regex,但不是 how-to-pair ,并且将这些奇妙的类一起使用。
除了将所有应用程序源代码复制到单独的vhost目录之外,是否有正确的方法使用路由器配置提供上述uri方案?
答案 0 :(得分:1)
您必须了解路由的工作原理。路由基于键并包含一些选项。所有模块的所有配置(包括路由)都合并为一个配置数组。
这意味着如果您的应用程序中定义了路由home
,然后在Bike中拥有相同路由home
,则Bike将覆盖应用程序中的主页。 / p>
最好根据命名空间获得路径名称。所以申请路线:
'router' => array(
'routes' => array(
'home' => array(
// config here
)
)
);
自行车路线
'router' => array(
'routes' => array(
'bike' => array(
// config here
)
)
);
请注意第二个示例中home
与bike
的区别!