Php ZF2按主机名路由可与其他模块一起使用

Php ZF2按主机名路由可与其他模块一起使用,php,zend-framework,routes,zend-framework2,zend-route,Php,Zend Framework,Routes,Zend Framework2,Zend Route,我在我的myhost.com(reseller.myhost.com)上添加了一个reseller子域,并使用它路由到我的reseller模块。请阅读我在此之前发布的问题: 我的经销商路线配置如下所示: 'router' => array( 'routes' => array( 'Reseller' => array( 'type' => 'Hostname', 'options' =>

我在我的
myhost.com
reseller.myhost.com
)上添加了一个
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

我建议您为
广告
模块创建一个单独的路由定义

您在
广告
模块中的路由配置(
模块/adversed/config/module.config.php

您在
分销商
模块中的路线配置(
模块/Reseller/config/module.config.php

您可以根据子域来区分匹配项

路由
home
createAdd
播发
模块不带子域匹配

路径
reseller.home
与子域
reseller.myhost.com
中的
reseller
模块中的索引匹配

查看主机名路由示例的更多详细信息。对于所有不在子域路由上的标准路由,您应该有一个“根”主机名。例如:

'router' => array(
    'routes' => array(
        'myhost' => array(
            'type'    => 'Hostname',
            'options' => array(
                'route'    => 'myhost.com',
            ),
        ),
    ),
),
'router' => [
    'routes' => [
        'myhost' => [
            'child_routes' => [
                'createAd' => array(
                     'type'    => 'segment',
                     'options' => array(
                         'route'    => '/createAd[/:subCategoryId]',
                         'constraints' => array(

                         ),
                         'defaults' => array(
                             'controller' => 'Advertise\Controller\Advertise',
                             'action'     => 'createAd',
                         ),
                     ),
                 ),
             ],
         ],
     ],
],
现在,您可以将“createAd”路由(和其他路由)添加为“myhost”路由的子路由。例如:

'router' => array(
    'routes' => array(
        'myhost' => array(
            'type'    => 'Hostname',
            'options' => array(
                'route'    => 'myhost.com',
            ),
        ),
    ),
),
'router' => [
    'routes' => [
        'myhost' => [
            'child_routes' => [
                'createAd' => array(
                     'type'    => 'segment',
                     'options' => array(
                         'route'    => '/createAd[/:subCategoryId]',
                         'constraints' => array(

                         ),
                         'defaults' => array(
                             'controller' => 'Advertise\Controller\Advertise',
                             'action'     => 'createAd',
                         ),
                     ),
                 ),
             ],
         ],
     ],
],

我不明白是什么问题。你能补充一些细节吗。人们期望什么?发生了什么事?“其他模块”中的路由配置是什么样子的您提到的。@Wilt my firend i expet to route of reseller.myhost.com/createAdvertise dosent work因为在advertise controller中定义了createAdvertise route而不是在Diselliser controller中让我更新我的问题以帮助您完成我更新了我的问题请阅读我更新的问题和最后的2行注意谢谢请注意,我想在没有子域的情况下发布模块工作,并且正常工作,并且只有分销商模块与子域一起工作OK,因此通过此更改,我的路线将更改为home/createAd?因为在我只调用$this->url('createAd')之前,是吗?因此,主要问题尚未解决,我可以路由reseller.myhost.com/createAd