2016-09-14 8 views
0
-Myproject 
    -application 
    -controllers 
    -subfolder1 
     -subfolder2 
      -subfolder3 
       -subfolder(..n) 
       Controller.php 

にn個のサブフォルダ内のデフォルトコントローラを設定し、あなたがサブディレクトリ内の深い1つのレベル以上のコントローラを置くことができるということは表示されませんroutes.phpはどのようにCodeIgniterの3

$route['default_controller'] = 'subfolder1/subfolder2/subfolder3/subfolder(..n)/controller'; 
+0

[ドキュメントをお読みですか?](https://www.codeigniter.com/userguide3/general/controllers.html#organizing-your-controllers-into-sub-directories)?どうやら、サブフォルダの中にコントローラを1つ以上深く置くことはできません。 – Sparky

答えて

0

According to the examples in the docs設定する必要があります。

example.com/index.php/subdirectory/controller/function 

私はあなたのルートが正しく見えるとは思わない。 "home"がコントローラまたはサブディレクトリ名でない限り、ルートの先頭にはhome/がありません。 examples hereを参照してください。

$route['default_controller'] = 'subdirectory/controller'; 
+0

@Sparkey、私は経路を訂正し、解決策を見つけて答えを投稿しました。わたしにはできる。効果があるかどうか確認してください。 –

0

私が研究し、サブフォルダにデフォルトのコントローラをサポートすることはできません_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'; 

我々はそれがアクションとして、そのメソッドを検出し、我々はアクション名を渡さない場合、それはアクションとしてインデックスを前提とするアクションメソッド名を渡します場合。

関連する問題