2015-05-22 158 views
5

在笨3應用程序,我有這樣的目錄結構:默認控制器不工作

-Myproject 
    -application 
    -controllers 
    -home 
     Welcome.php //This is my controller inside home directory 

如何設置歡迎控制器作爲默認的控制器? 我用下面的代碼

$route['default_controller'] = 'home/Welcome'; 

此路由適用於笨的早期版本。

+0

嘗試使文件夾名稱'首頁'大寫 –

+0

@ShaifulIslam不工作, – codex

+2

在codeigniter 3 $ route ['default_controller'] ='welcome';必須不在子文件夾中,我認爲您必須爲該路由器或自定義路由器定製加載程序。 – user4419336

回答

9

默認情況下,您不允許這樣做。爲了解決這個問題,你需要破解你的系統Router.php

笨/系統/核心/ Router.php

編輯的幾行代碼,使其變成這樣:

codeigniter/system/router.php

線1. if (!sscanf($this->default_controller, '%[^/]/%[^/]/%s', $directory, $class, $method) !== 2)

線2. if (! file_exists(APPPATH.'controllers'. DIRECTORY_SEPARATOR . $directory. DIRECTORY_SEPARATOR .ucfirst($class).'.php'))

線3 $this->set_directory($directory);

一旦你這樣做,你可以撥打下目錄的默認控制器。

$ route ['default_controller'] ='home/Welcome';

+0

這隻適用於一個子文件夾。我如何做到這一點2個或更多的子文件夾? –

+0

適用於CI 3.1。謝謝。 – Duque

3

您不需要更改CODEIGNITER系統文件夾中的任何文件。 Codeigniter允許開發人員擴展其功能。您可以創建一個名爲MY_Router.php的文件。

<?php 
class MY_Router extends CI_Router { 
    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.'); 
     } 
     if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) { 
      $method = 'index'; 
     } 
     if(is_dir(APPPATH.'controllers/'.$class)) { 
      $this->set_directory($class); 
      $class = $method; 
      if (sscanf($method, '%[^/]/%s', $class, $method) !== 2) { 
       $method = 'index'; 
      } 
     } 

     if (! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) { 
      return; 
     } 
     $this->set_class($class); 
     $this->set_method($method); 
     $this->uri->rsegments = array(
      1 => $class, 
      2 => $method 
     ); 
     log_message('debug', 'No URI present. Default controller set.'); 
    } 
} 

注:不要更改文件名。