2015-05-22 14 views
5

In codeigniter 3 applicazione devo struttura di directory in questo modo:predefinita all'interno sottocartella CodeIgniter 3 non funziona

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

Come impostare regolatore di benvenuto come controller di default? Io uso sottostante Codice

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

Questo instradamento funziona per le versioni precedenti di CodeIgniter.

+0

provare a rendere il nome della cartella 'Home' maiuscolo –

+0

@ShaifulIslam Non funziona, – codex

+2

In codeigniter 3 $ route ['default_controller'] = 'welcome'; non deve essere in sottocartelle, penso che sarebbe necessario creare un caricatore personalizzato per quel router o personalizzato. – user4419336

risposta

9

Per impostazione predefinita, non è consentito farlo. Per aggirare il problema, è necessario incidere il vostro sistema Router.php:

codeigniter/system/core/Router.php

Modifica poche righe di codice in modo che diventi in questo modo:

codeigniter/system/router.php

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

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

linea 3. $this->set_directory($directory);

Una volta fatto, è possibile chiamare il controller di default nella directory.

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

+0

Funziona solo per una sottocartella. Come posso fare questo per 2 o più sottocartelle? –

+0

Funziona bene con CI 3.1. Grazie. – Duque

3

non c'è bisogno di cambiare qualcosa nel file cartella di sistema CodeIgniter. Codeigniter consente agli sviluppatori di estendere le loro funzionalità. È possibile creare un file denominato 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.'); 
    } 
} 

Nota: Non cambiare il nome del file.

Problemi correlati