Codeigniter 3.0 - 无法加载请求的文件:subfolder / file.php

时间:2016-03-24 07:32:10

标签: routing codeigniter-3

我使用Codeigniter 3.0。我发现无法路由到子文件夹中的文件。 之后,我在系统/核心中编辑文件route.php,如本指南所示: default controller inside subfolder codeigniter 3 not working 页面可以正确路由。 但是,我上传主机后得到错误: "无法加载请求的文件:frontend / Home.php" 我的结构:

-controllers
  -frontend
     Home.php
-views
  - frontend
     Home.php

我的路线档案:

$route['default_controller'] = 'frontend/Home';

我检查了班级的名字,大小写了第一个字符。

1 个答案:

答案 0 :(得分:0)

CodeIgniter使用Frontend方法查找home控制器。你可以通过两种方式解决它。首先要在Home.php目录中创建controllers控制器,并使用下一个代码:

<?php defined('BASEPATH') OR exit('Restricted area!');

class Frontend extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this->home();
    }

    public function home()
    {
        redirect('frontend/home', 'refresh');
    }
}

使用APPPATH.'config/routes.php'代码

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

第二种方法是使用自定义路由器类:

<?php

/*
 * Custom router function v 0.1
 *
 * Add functionality : read into more than one sub-folder
 *
 */

class MY_Router extends CI_Router
{
    public function __construct()
    {
        parent::__construct();
    }

    public function _validate_request($segments)
    {
        if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
        {
            return $segments;
        }

        if (is_dir(APPPATH.'controllers/'.$segments[0]))
        {
            $this->set_directory($segments[0]);
            $segments = array_slice($segments, 1);

            /* ----------- ADDED CODE ------------ */

            while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0]))
            {
                // Set the directory and remove it from the segment array
                $this->set_directory($this->directory . $segments[0]);
            $segments = array_slice($segments, 1);
            }

            /* ----------- END ------------ */

            if (count($segments) > 0)
            {
                if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT))
                {
                    show_404($this->fetch_directory().$segments[0]);
                }
            }
            else
            {
                $this->set_class($this->default_controller);
                $this->set_method('index');

                if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
                {
                    $this->directory = '';
                    return array();
                }

            }

            return $segments;
        }

        show_404($segments[0]);
    }
}

Credits