我试图避免CodeIgniter路由正则表达式矫枉过正

时间:2013-02-18 20:11:47

标签: php regex codeigniter

我正在寻找有关如何避免的建议:

$route = array(
    'directory'             => 'accountdirectory/index',
    'directory/(:any)'          => 'accountdirectory/index/$1',
    'directory/(:any)/(:num)'       => 'accountdirectory/index/$1/$2' ...

如果可能的话,通过更宽容的单一模式,如果所有段都不存在,路由不会中断:

'directory(/)?(:any)?(/)?(:any)' => 'accountdirectory/index/$1/$2'

路由

  • 目录/所有
  • 目录/
  • 目录/所有/ 10

2 个答案:

答案 0 :(得分:1)

您可以使用一条路线:

$route = array(
    'directory' => 'accountdirectory/index',
    ...
)

并定义accountdirectory / index函数,如下所示:

public function index($arg1 = null, $arg2 = null) {
    if ($arg === 'all' && $arg2 !== null) {
        // directory/all/XXXX
    }
    elseif ($arg1 === 'all') {
        // directory/all
    }
    else {
        ...
    }
}

答案 1 :(得分:0)

通常我会在你描述的情况下做的是:

$route['404_override'] = 'directory';

然后你可以在构造函数或索引函数中使用if或switch语句根据其他uri段从那里重定向。