CodeIgniter 3没有调用默认控制器?

时间:2017-02-19 03:10:32

标签: php codeigniter codeigniter-3

我被要求调查一个似乎没有调用CodeIgniter 3项目中的default_controller的问题。相反,我们看到404错误。

application/controllers文件夹中有一个Welcome.php文件,其中包含以下内容:

class Welcome extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                // Your own constructor code
        }

        public function index()
        {
                print('hello');
                $this->load->view('welcome_message');
        }
}

application/config/routes.php文件包含:

$route['default_controller'] = "welcome";

我只看到404而没有预期的文字。

print添加routes.php语句表明它正在加载。此外,将其显式绑定到路径会调用它,但不会将其设置为默认控制器。

$route['blah'] = "welcome"

有人可以提出可能发生的事情吗?

BTW我们在Ubuntu 16.04机器上使用PHP7。

1 个答案:

答案 0 :(得分:0)

事实证明该项目是CodeIgniter 2项目的升级,并且有一些迁移步骤尚未完成。事实证明,在库文件夹中有一个MY_Router.php,似乎放弃了东西 - 至少把它移到应用程序/核心解决了这个问题。

在给定文件名大写的情况下,MY_Router.php文件需要进行额外的修改,作为CI3迁移的一部分请求:

function _validate_request($segments)
{
    // Does the requested controller exist in the root folder?
    if (file_exists(APPPATH.'controllers/'.ucfirst($segments[0]).'.php'))
    {
        return $segments;
    }
    ...
}

BTW我确信它不是HTTP服务器重写问题,因为CodeIgniter 404错误页面显示了预期的调用路径。我添加了一个print(_SERVER['REQUEST_URI'])来查看发生了什么。

编辑:我现在看到上面的ucfirst方法在其他安装中并不理想,但鉴于此项目的controllers文件夹中没有子文件夹,这是该项目的快速修复。