[英]ZF2 Routing by Hostname works with other modules
我在myhost.com
( reseller.myhost.com
)上添加了一个reseller
子域,并将其用于路由到我的Reseller
模块。 在这里阅读我之前发布的问题: 单击此处
我的Reseller
路线配置如下所示:
'router' => array(
'routes' => array(
'Reseller' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'reseller.myhost.com',
'constraints' => array(
),
'defaults' => array(
'controller' => 'Reseller\Controller\Reseller',
'action' => 'index'
)
),
'may_terminate' => true,
'child_routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'__NAMESPACE__' => 'Reseller\Controller',
'controller' => 'Reseller',
'action' => 'index',
),
),
),
)
)
)
)
我的createdAd
路由在reseller.myhost.com/createdAd上匹配,但我希望其他模块的路由在此reseller
子域上不起作用。
这是我的发布路由配置
'router' => array(
'routes' => array(
'locate' => array(
'type' => 'segment',
'options' => array(
'route' => '/locate[/:cityName][/:CityId][/:CategoryId][/:categoryName]',
'constraints' => array(
),
'defaults' => array(
'controller' => 'Advertise\Controller\Advertise',
'action' => 'index',
),
),
),
'createAd' => array(
'type' => 'segment',
'options' => array(
'route' => '/createAd[/:subCategoryId]',
'constraints' => array(
),
'defaults' => array(
'controller' => 'Advertise\Controller\Advertise',
'action' => 'createAd',
),
),
),
),
),
));
请注意,我要宣传没有子域的模块,并且可以正常工作,并且只有经销商模块可以与子域一起使用
为什么会发生这种情况?
我从您的问题中了解:您希望createAd
路由在该子域上不起作用。 因此, reseller.myhost.com/createdAd
myhost.com/createdAd
不应该匹配,而是要在没有子域myhost.com/createdAd
的路由上进行匹配。
我建议您为Advertise
模块创建一个单独的路由定义。
您在Advertise
模块中的路由配置( module/Advertise/config/module.config.php
)
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Advertise\Controller\Advertise',
'action' => 'index'
)
),
)
'createAd' => array(
'type' => 'Literal',
'options' => array(
'route' => '/createAd',
'defaults' => array(
'controller' => 'Advertise\Controller\Advertise',
'action' => 'createAd',
)
)
)
)
)
您在Reseller
模块中的路由配置( module/Reseller/config/module.config.php
)
'router' => array(
'routes' => array(
'Reseller' => array(
'type' => 'Hostname',
'options' => array(
'route' => ':reseller.myhost.com',
),
'may_terminate' => false,
'child_routes' => array(
'home' => array(
'type' => 'Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Reseller\Controller\Reseller',
'action' => 'index'
)
)
)
)
)
)
),
您可以通过子域来区分匹配项。
该路线home
和createAdd
匹配的Advertise
模块,而不子域。
路由reseller.home
与子域reseller.myhost.com
中的Reseller
模块中的索引匹配。
还要在ZF2文档中检查更多详细信息,以及主机名路由示例
您应该为所有标准路由(不在子域路由上)使用一个“ root”主机名。 例如:
'router' => array(
'routes' => array(
'myhost' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'myhost.com',
),
),
),
),
现在,您可以将“ createAd”路由(和其他路由)添加为“ myhost”路由的子路由。 例如:
'router' => [
'routes' => [
'myhost' => [
'child_routes' => [
'createAd' => array(
'type' => 'segment',
'options' => array(
'route' => '/createAd[/:subCategoryId]',
'constraints' => array(
),
'defaults' => array(
'controller' => 'Advertise\Controller\Advertise',
'action' => 'createAd',
),
),
),
],
],
],
],
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.