1

我有很多模块,并且根据模块动态生成路由。为了解释的目的,我只为一个模块添加路线。以下是users模块的路线。

<?php

//1
$router->add('/users',array(
    'module' =>'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action' => 'index'
));

//2
$router->add('/users/:params/',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action' => 'index',
    'params'=>1
));

//3
$router->add('/users/:action',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action'=>1
));

//4
$router->add('/users/:action/:params',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action'=>1,
    'params'=>2
));
?>

假设用户模块的 url 是 http://www.example.com/admin/users/

此 url 与第一条路线相匹配,并按预期工作。但是当我们导航到下一页时,我的网址看起来像 http://www.example.com/admin/users/2

现在的问题是它应该匹配第二条路线,但它匹配第四条路线。如果我将第二条路线一直向下移动,上面的 url 可以工作,但 url http://www.example.com/admin/users/search/1不起作用

任何人都可以帮我让它工作吗?谢谢

4

1 回答 1

1

:params 很棘手,因为它会匹配任何东西。所以/users/:params/匹配/users/:action /users/:action/:params,它本身有 :params ——这使得它对路由产生了影响。

作为一般规则,请避免头脑风暴的情况。例如,您可以将 :params 放在可能的最长匹配 ( /users/:action/:params ) 的末尾,然后重写较短的路由而不包含任何 :params 。

于 2015-06-02T09:35:13.797 回答