加载控制器没有$ route

时间:2013-04-02 04:47:09

标签: codeigniter

exmple:这个带有函数page

的加载默认控制器/类
www.example.com/page

除非我们有名为page的控制器/类并设置$route['page'] = 'page';,否则它将加载控制器。但是如果我们不设置$route,它仍然会加载default_controller。

是真的,controller必须始终有$route['']吗?是否可以在没有设置page 的情况下加载控制器$route[''],即使没有相同名称的默认控制器功能?

修改

我访问

www.mysite.com/index.php/user

我的user控制器有index功能,但我的路径文件只包含:

$route['default_controller'] = 'page';
$route['(:any)'] = 'page/$1';
$route['product'] = 'product';
//$route['user'] = 'user';
$route['404_override'] = '';

返回404,仅在我取消注释时才有效:$route['user'] = 'user';

为什么?

感谢。

1 个答案:

答案 0 :(得分:2)

不,那不是真的。 CodeIgniter,默认情况下为directly maps URI segments

example.com/index.php/controller/method/param/param/...

或者如果您有.htaccess /类似的解决方案来删除index.php:

example.com/controller/method/param/param/...
如果您希望使用不直接映射到此约定的URL,则使用

Routing

修改:您的路线存在冲突。 CodeIgniter将从上到下按顺序查看每条路线,如果找到匹配的路线,它将停止查找并处理该路线。因为你有一个(:any) catch-all路线,它会匹配任何(就像它说的那样)。

经验法则是首先放置您最具体的路线,然后在以后获得更多通用和全部捕捉。您的(:any)路线应该是列表中的最后一条路线。默认控制器和404覆盖应保持优先。

$route['default_controller'] = 'page';
$route['404_override'] = '';

$route['product'] = 'product';
$route['user'] = 'user';
$route['(:any)'] = 'page/$1';

您需要添加productuser路由,因为您已定义(:any)路由。如果您想避免为每个现有控制器编写路由规则,但仍然利用全能控制器,请考虑使用404_override控制器/方法。您可以进行验证以检查URI是否在那里有效。如果没有,请确保抛出404错误(您可以使用show_404()),因为任何不存在的URL都将被路由到那里。