Zend Framework中的主机名和基于正则表达式的路由

时间:2012-02-28 05:48:04

标签: php zend-framework zend-route zend-router

是否可以在Zend Framework中创建一个可以使用通配符或正则表达式匹配主机名的路由器(无论主机名中有多少部分)?

我可以根据主机名

创建匹配的路由
   $externalHostname = new Zend_Controller_Router_Route_Hostname(
        'ext.mysite.com', array(
            'module'=> 'external',
    ));

但是,如果我想实现这样的目标呢?

   $externalHostname = new Zend_Controller_Router_Route_Hostname(
        'ext.*', array(
            'module'=> 'external',
    ));

其中任何以“ext。”开头的主机名被路由到“外部”模块,与主机名的子域级别无关,所以

  • ext.mysite.com
  • ext.test.mysite.com

都会匹配。

如何实现?

2 个答案:

答案 0 :(得分:0)

您无法通过Zend_Controller_Router_Route_Hostname实现此目的。 如果你打算只匹配有限数量的子域级别(比方说2-4),它可能有效。在这种情况下,您将为每个案例添加几个主机名路由。

但无限 - 我不这么认为。

答案 1 :(得分:0)

Zend Router做什么?

答案:它基本上设置并告诉前端控制器当前模块/控制器/动作是什么。然后Front控制器告诉Zend Dispatcher转到moduleFolder / controllerFolder并执行actionMethod。

现在您可以检查上述情况并手动设置路由器。

现在问题是你应该检查并设置这个路由器?

其中一个解决方案是: - 在public / index.php文件中,您可以像插件$ frontController-> registerPlugin(“my_router”)一样注册它,my_router应该扩展“Zend_Controller_Plugin_Abstract”。在这个my_router类构造函数中,您可以设置自己的路由器。

我想说,只需检查Zend Framework的基本流程(在发出请求时,zend框架内部会发生什么?)