无法访问子文件夹中的Codeigniter控制器

时间:2011-09-12 22:05:45

标签: php codeigniter codeigniter-2

我已经设置了一个带有控制器的文件夹:controllers/admin/home.php,但是当我尝试访问它时,我从浏览器中获得了404.

这是我的路线档案:

$route['employers'] = "employers/home";
//$route['employers/dash'] = "employers/dash";
$route['default_controller'] = "home";
$route['404_override'] = '';

这是控制器文件:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class home extends CI_Controller {

    function __construct(){

        parent::__construct();

        /*
            enable profiler
        */
        //$this->output->enable_profiler(TRUE);     

        $this->load->helper('url');
        $this->load->library('ion_auth');
        $this->load->library('session');

        $this->load->library('form_validation');

        $this->load->helper('layout');
    }
}

.htaccess似乎很好。关于我做错了什么想法?

2 个答案:

答案 0 :(得分:1)

注意一些事情: 1)路由按照写入的顺序执行,您的自定义路由必须遵循默认路由。所以,它应该是:

$route['default_controller'] = "home";
$route['404_override'] = '';
$route['employers'] = "employers/home";

如果您的控制器“home”位于“雇主”文件夹内。

2)控制器不需要你编写的所有东西,实际上你甚至不需要来调用父构造函数,除非你打算加载库和整个控制器方法的资源(也可以通过在autoload.php文件中自动加载它们来实现),所以它可能只是:

file: application/controllers/employers/home.php

class Home extends CI_Controller {

    function index()
    {
       // this is the method you're calling with your URL!
    }
}

3)如上所述,正如@Wesley已经指出的那样,您正在尝试在子文件夹EMPLOYERS中访问控制器HOME的INDEX方法。但你没有定义一个index()方法(如果没有提供其他方法,则默认调用该方法)。 相反,似乎CI正试图寻找雇主控制者和家庭方法;如果它找不到它,但你有一个雇主文件夹,它会尝试访问雇主文件夹中的家庭控制器中的索引方法。并且,既然它没有找到它,你就得到了404页面。

希望我很清楚,否则只是问。

答案 1 :(得分:0)

您没有说出您是如何尝试通过网址访问它的。它应该是:

{YOUR_BASE_URL}admin/home

...后跟可选的网址细分(/method/param1/param2/etc)。

如果没有其他细分,默认情况下会加载index方法。但是,由于您没有定义任何方法,因此无需加载。

如果在定义方法后仍然失败,请将控制器文件移出子目录以启动程序,并确保它可以正常工作。