【问题标题】:Can't access a Codeigniter controller in sub folder无法访问子文件夹中的 Codeigniter 控制器
【发布时间】:2011-09-12 22:05:44
【问题描述】:

我已经设置了一个文件夹,其中包含一个控制器: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 似乎是很好的标准。关于我做错了什么有什么想法吗?

【问题讨论】:

  • 请添加您通过浏览器访问控制器的地址。
  • 顺便说一句:如果这是所有路线,在这种情况下路线肯定不相关。

标签: php codeigniter codeigniter-2


【解决方案1】:

注意几点: 1) 路由按照编写顺序执行,您的自定义路由必须遵循默认路由。所以,应该是:

$route['default_controller'] = "home";
$route['404_override'] = '';
$route['employers'] = "employers/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 已经指出的那样,您正尝试使用您的 url 访问子文件夹 EMPLOYERS 中控制器 HOME 的 INDEX 方法。但是您没有定义 index() 方法(如果没有提供其他方法,则默认调用该方法)。 相反,CI 似乎正在尝试寻找雇主控制器和家庭方法;如果它没有找到它,但你有一个雇主文件夹,它会尝试访问雇主文件夹中主控制器中的索引方法。而且,由于它也没有找到,所以你得到的是 404 页面。

希望我很清楚,否则就问吧。

【讨论】:

  • 我已将控制器移出子文件夹,它们似乎工作正常......子文件夹似乎没有做任何事情 - 当我复制子文件夹并将其命名为时雇主 22并从浏览器访问它,它工作正常 - 直到问题所在文件夹的默认控制器。 (我认为)
  • 您是否在控制器中设置了 index() 方法?它应该可以工作,特别是因为你说如果你给它另一个名字,它就可以正常工作
【解决方案2】:

您没有说明您是如何尝试通过 url 访问它的。应该是:

{YOUR_BASE_URL}admin/home

...后面是可选的 URL 段 (/method/param1/param2/etc)。

如果没有额外的段,这将默认加载index 方法。但是,由于您没有定义 任何 方法,因此无需加载任何内容。

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

【讨论】:

  • 我已经定义了索引方法等等——我只是认为包括构造函数可能是个问题。
  • 当你将控制器文件移出子目录时发生了什么,你如何通过url访问它,你得到的是服务器404还是CI 404?
  • 也尝试移出子目录并且效果很好。所以我还是迷路了
  • 嗯,您还没有回答 如何 您尝试通过 URL 访问它的重要问题...如果您提供足够的详细信息,很容易获得帮助 - 请记住那是你的下一个问题。玩猜谜游戏不好玩。
  • 我得到了一个 ci 404,我可以记录路由或运行分析器来查看文件是如何被访问的吗?
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多