繁体   English   中英

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

[英]ZF2 Routing by Hostname works with other modules

我在myhost.comreseller.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'
                        )
                    )
                )
            )
        )
    )
),

您可以通过子域来区分匹配项。

该路线homecreateAdd匹配的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM