私が研究し、サブフォルダにデフォルトのコントローラをサポートすることはできません_set_default_controller()
CodeIgniterの3 system/core/Router.php
ライブラリファイルの方法で発見しました。だから、私はこのメソッドをオーバーライド/カスタマイズしました_set_default_controller()
今、それはnレベルのサブフォルダをサポートしています。
私は今、私たちはアクションメソッド名なし
//
$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller';
以下のように
application/config/routes.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/core/MY_Router.php
を作成している
または
//アクションメソッド名を持つ
$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller/action';
我々はそれがアクションとして、そのメソッドを検出し、我々はアクション名を渡さない場合、それはアクションとしてインデックスを前提とするアクションメソッド名を渡します場合。
[ドキュメントをお読みですか?](https://www.codeigniter.com/userguide3/general/controllers.html#organizing-your-controllers-into-sub-directories)?どうやら、サブフォルダの中にコントローラを1つ以上深く置くことはできません。 – Sparky