I';我试图避免CodeIgniter路由regex过度使用


I'm trying to avoid CodeIgniter routes regex overkill

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

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

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

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

路由

  • 目录/全部
  • 目录/
  • 目录/all/10

您可以使用一条路线:

$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 {
        ...
    }
}

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

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

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