CodeIgniter自定义管理URI路由

时间:2010-01-18 14:57:19

标签: php codeigniter routes

更新:已解决!对于破碎的页面,我只是做了一个管理控制器。现在每个模型都有一个功能:)快乐的日子!

尝试将我的管理功能存放在与我的前端代码相同的控制器中。为此,我正在设置一些自定义路由,以便可以通过以下方式访问管理员:

/admin/controller/id // instead of /controller/admin/id
/admin/controller/create // instead of /controller/create
/admin/controller/detail/id // instead of /controller/detail/id
/admin/controller/update/id // instead of /controller/update/id
/admin/controller/delete/id // instead of /controller/delete/id

我当前的路线非常适合细节,创建,更新,删除

$route['admin/(:any)/detail'] = "$1/detail"; // WORKS!!!
$route['admin/(:any)/detail/(:num)'] = "$1/detail/$2"; // WORKS!!!
$route['admin/(:any)/create'] = "$1/create"; // WORKS!!!
$route['admin/(:any)/create/(:num)'] = "$1/create/$2"; // WORKS!!!
$route['admin/(:any)/update'] = "$1/update"; // WORKS!!!
$route['admin/(:any)/update/(:num)'] = "$1/update/$2"; // WORKS!!!
$route['admin/(:any)/delete'] = "$1/delete"; // WORKS!!!
$route['admin/(:any)/delete/(:num)'] = "$1/delete/$2"; // WORKS!!!

然而,我无法让管理页面使用ID。我可以重新路由索引页面,但如果我无法传递ID,则无法使用分页。

$route['admin/(:any)'] = "$1/admin"; // WORKS!!!
$route['admin/(:any)/(:num)'] = "$1/admin/$2"; // EPIC FAIL :( 404's

有人可以帮我解决这个问题,甚至建议一个替代的应用程序结构解决方案。

3 个答案:

答案 0 :(得分:4)

确保你的正则表达式路由(包括带有:num和:any的路由)必须在default_controller路由之后。

有关创建合适管理面板的更多方法,请查看我在creating an admin panel in CodeIgniter上的文章。有三种不错的方法可以做到这一点,本文解释了每种方法的优点和内容。

答案 1 :(得分:0)

如果您的管理员很复杂,并且您需要多个控制器,则只需在application / controllers文件夹中创建一个admin文件夹即可。然后将管理控制器放入其中。

因此,application / controllers / admin / login将像http://example.com/admin/login

一样工作

答案 2 :(得分:0)

旧问题已经有一个已接受的答案,但我认为如果你在第一个RegEx中包含一个行尾锚点,你的设置会正常工作:

$route['admin/(:any)/(:num)$'] = "$1/admin/$2"; // EPIC FAIL :( 404's
                          ^^^

否则您打算用第二个RegEx捕获的网址将被您的第一个RegEx拦截。