-Myproject
-application
-controllers
-subfolder1
-subfolder2
-subfolder3
-subfolder(..n)
Controller.php
需要设置routes.php
$route['default_controller'] = 'subfolder1/subfolder2/subfolder3/subfolder(..n)/controller';
答案 0 :(得分:0)
According to the examples in the docs似乎您不能将Controller放在一个子目录中超过一个级别。
example.com/index.php/subdirectory/controller/function
我也不认为你的路线看起来是正确的。除非home/
是控制器或子目录名称,否则在路由开始时不会有"home"
。请参阅examples here。
$route['default_controller'] = 'subdirectory/controller';
答案 1 :(得分:0)
我已经在codeigniter 3中研究并发现system/core/Router.php
库文件的方法_set_default_controller()
不能支持子文件夹中的默认控制器。所以我已经覆盖/自定义了这个方法_set_default_controller()
,现在它支持n级子文件夹并且对我来说很好。
我使用以下代码创建了application/core/MY_Router.php
以覆盖此方法_set_default_controller()
<?php
/**
* Override Set default controller
*
* @author : amit
*
* @return void
*/
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?
$x = explode('/', $this->default_controller);
$dir = APPPATH.'controllers'; // set the controllers directrory path
$dir_arr = array();
foreach($x as $key => $val){
if(!is_dir($dir.'/'.$val)){
// find out class i.e. controller
if(file_exists($dir.'/'.ucfirst($val).'.php')){
$class = $val;
if(array_key_exists(($key+1), $x)){
$method = $x[$key+1]; // find out method i.e. action
}else{
$method = 'index'; // default method i.e. action
}
}else{
// show error message if the specified controller not found
show_error('Not found specified default controller : '. $this->default_controller);
}
break;
}
$dir_arr[] = $val;
$dir = $dir.'/'.$val;
}
//set directory
$this->set_directory(implode('/', $dir_arr));
$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.');
}
?>
现在我们可以在application/config/routes.php
中设置默认控制器,如下所示
//没有操作方法名称
$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller';
OR
//使用操作方法名称
$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller/action';
如果我们将传递操作方法名称,它将检测该方法为操作,如果我们不传递操作名称,则它将索引视为操作。