1

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

我可以创建一个基于主机名匹配的路由

   $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

两者都会匹配。

怎样才能做到这一点?

4

2 回答 2

0

您不能通过 Zend_Controller_Router_Route_Hostname 实现这一点。如果您打算只匹配有限数量的子域级别(比如说 2-4),它可能会起作用。在这种情况下,您将为每种情况添加多个主机名路由。

但无限——我不这么认为。

于 2012-02-28T09:23:37.120 回答
0

Zend 路由器是做什么的?

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

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

现在的问题是你应该在哪里检查和设置这个路由器?

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

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

于 2012-03-13T06:24:59.017 回答