Zend_Controller_Router_Rewrite和routes.ini用于多路段

时间:2011-02-28 17:01:21

标签: php regex zend-framework url-rewriting

我有一个ZF应用程序正在使用自定义路由到页面列表(比如一个位置列表),并且遇到问题要么了解路由请求值的工作原理,要么正则表达式使其工作。我希望http://domain.com/locations转到http://domain.com/location/list/page/1然后拥有以下内容(http://domain.com/locations/2 - &gt; http://domain.com/location/list/page/2等等。)。< / p>

问题在于识别空案例(即http://domain.com/locations)。

在我的routes.ini中,我有(这不起作用,但/ ^ [\ d] * $ /在一个简单的preg_match中工作):

routes.locations-page.route = locations/:page
routes.locations-page.defaults.controller = locations 
routes.locations-page.defaults.action = list-new
;routes.locations-page.reqs.page = \d* - does not work
routes.locations-page.reqs.page = ^[\d]*$

什么样的reqex会在单个路径中捕获http://domain.com/locationshttp://domain.com/locations/1http://domain.com/locations/2场景?

THX

1 个答案:

答案 0 :(得分:0)

由于网址结构不同,因此无法在同一规则中匹配网址http://domain.com/locationshttp://domain.com/locations/2。但是你可以尝试以下方法来实现你想要做的事情。

在你的bootstrap文件中,

    $r = new Zend_Controller_Router_Route_Regex('locations/(*)',
                    array('controller' => 'locations', 'action' => 'list-new'), 
array(1 => 'locationID'));
    $router->addRoute('add-location', $r);

您还可以使用首选的添加路线的方式。

在您的位置控制器中,

$locationID = $this->_getParam('locationID');

现在,根据此值,转发适当的操作。