在Zend Router中过滤请求

时间:2012-04-05 22:23:32

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

就编写Zend路由器而言,我是一个新手。 我想路由表单的所有请求

/:username to controller => user and action => profile。 问题是我希望能够过滤哪个:用户名将被路由。 即我想过滤用户名将被路由。

我想要应用的最基本和最重要的过滤器是,如果:username与某些现有控制器名称匹配,则不应将其路由到/ user / profile。

对此的任何帮助都将深表感谢。 感谢。

1 个答案:

答案 0 :(得分:1)

以下是一些提示,可以帮助您达到目标:

  1. 路由聚合到堆栈上,因此它们是LIFO(后进先出)。这意味着应该最后定义您的最高优先级路由。对于此特定方案,您希望先前列出您的/:username路由,以使其具有较低的优先级。这将允许您的其他现有路线首先被路由。
  2. 您提到要“过滤”哪个:用户名将被路由。你有一个静态的用户名列表吗?如果是这样,你可以使用Regex路由并执行(username1 | username2 | ...)。如果您通过数据库查找用户名,则需要构建一个查询数据库的自定义路由类。
  3. 或者,您可以简单地使用基于模式的路线,但然后在前端控制器插件中进行过滤。
  4. 注意:如果您使用选项#3,以下内容应该可以帮助您入门:

    $router       = Zend_Controller_Front::getInstance()->getRouter();
    $matchedRoute = $router->getCurrentRouteName();
    

    您将根据路线名称采取行动。如果它不是定义/:username路由的路由名称,则忽略。如果匹配,请查找用户名并过滤。