路由配置中的default_controller设置为"home.php".
我有一个控制器的子目录,我们称之为"文件夹".所以,如果我访问http://mysite.com/folder/,应该调用默认控制器"folder/home.php"吗?
但由于某种原因,这不起作用,我得到404.访问http://mysite.com/folder/home或http://mysite.com/folder/home/index按预期工作.除此之外,默认控制器在根目录中工作(http://mysite.com加载home.php).
任何想法,有没有其他人经历过这个?我无法理解它 - 它似乎是一个CI问题,但我找不到其他人有同样的问题.
从我至少理解的方式来看,文档表明这应该可以正常工作:http://codeigniter.com/user_guide/general/controllers.html#subfolders
将默认控制器设置为"folder/home.php"意味着http://mysite.com/folder/正常工作.除了我希望默认控制器只是"home.php" - 无论是在根目录还是在子目录中,都应该加载该目录中的home.php,如文档所示.
干杯
Yas*_*uri 24
对于controllers文件夹中的每个子文件夹,您必须在其中指定默认控制器routes.php.内置$route['default_controller']的子文件夹不起作用.
例如:要为您的folder子文件夹设置默认控制器,home请将以下内容添加到您的/application/config/routes.php文件中:
$route['folder'] = "folder/home";
Run Code Online (Sandbox Code Playgroud)
这意味着与URL http://mysite.com/folder/相同http://mysite.com/folder/home.
Gir*_*ish 13
您可以根据需要扩展系统路由器,
application/core/目录中创建My_Router.php
/**要更改此许可证标题,请在"项目属性"中选择"许可证标题".*要更改此模板文件,请选择"工具"| 模板*并在编辑器中打开模板.*/
/**
* Description of My_Router
*
* @author girish
*/
class My_Router extends CI_Router {
//put your code here
public function __construct($routing = NULL) {
parent::__construct($routing);
}
protected function _set_default_controller() {
if (empty($this->default_controller)) {
show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
}
// Is the method being specified?
if (sscanf($this->default_controller, '%[^/]/%[^/]/%s', $directory, $class, $method) !== 3) {
$method = 'index';
}
if (is_dir(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory) === true) {
if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) {
// This will trigger 404 later
return;
}
$this->set_directory($directory);
$this->set_class($class);
$this->set_method($method);
} else {
if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) {
$method = 'index';
}
if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) {
// This will trigger 404 later
return;
}
$this->set_class($class);
$this->set_method($method);
}
// Assign routed segments, index starting from 1
$this->uri->rsegments = array(
1 => $class,
2 => $method
);
log_message('debug', 'No URI present. Default controller set.');
}
}
Run Code Online (Sandbox Code Playgroud)
并且_set_default_controller()从自定义方法覆盖,它将从子目录控制器以及根目录控制器工作.
并在 application/config/routes.php
如果你需要子目录默认控制器,那么
$route['default_controller'] = "admin/admins/login";
Run Code Online (Sandbox Code Playgroud)
如果你需要root目录默认控制器,那么
$route['default_controller'] = "welcome/index";
Run Code Online (Sandbox Code Playgroud)
不确定它是否适用于所有版本,但在CI3.0.6中进行了测试