2013-04-02 36 views
0

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

不,这是不正确的。笨,默认情况下,directly maps URI segments到:

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

或者,如果你有一个.htaccess /类似的解决方案删除的index.php:当你想使用,做了URL

example.com/controller/method/param/param/... 

Routing使用不直接映射到这个约定。

编辑:您有冲突的路线。 CodeIgniter将按照从上到下的顺序查看每条路线,如果找到匹配的路线,它将停止查看并处理该路线。因为你有一个(:any)全路径,它将匹配任何东西(就像它说的)。

经验法则是首先放置最具体的路线,然后获得更具通用性和更全面的路线。您的(:any)路线应该是列表中最后一个。而默认的控制器和404覆盖应该保持在第一位。

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

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

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

+0

请看看我的编辑。不管怎么说,还是要谢谢你。 – egig

+0

您有冲突的路线,需要定义每个现有的控制器。 –