子文件夹中的默认控制器codeigniter 3无法正常工作

时间:2015-05-22 12:40:55

标签: php routing codeigniter-3

在codeigniter 3应用程序中,我有这样的目录结构:

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

如何将欢迎控制器设置为默认控制器? 我使用下面的代码

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

此路由适用于以前版本的codeigniter。

3 个答案:

答案 0 :(得分: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';

答案 1 :(得分: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.');
    }
}

注意:请勿更改文件名。

答案 2 :(得分:1)

在routes.php中尝试

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;