【问题标题】:Codeigniter 3.0.0 - error 404 page not foundCodeigniter 3.0.0 - 找不到错误 404 页面
【发布时间】:2015-10-07 07:16:07
【问题描述】:

这是我的第一个 php 框架。我的控制器中有一个php文件,它是posts.php,但是当我尝试在localhost/codeigniter/index.php/posts运行它时,它显示错误404

应用文件夹内的.htaccess

<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>

自动加载.php

$autoload['libraries'] = array('database');
$autoload['helper'] = array('url');

config.php

$config['base_url'] = 'http://localhost/codeigniter/';
$config['index_page'] = 'index.php';

routes.php

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

模型文件夹中的post.php

    class Post extends CI_Model{

    function get_posts($num = 20, $start = 0){

        //$sql = "SELECT * FROM users WHERE active=1 ORDER BY date_added DESC LIMIT 0,20;";
        $this->db->select()->from('posts')->where('active', 1)->order_by('date_added', 'desc')->limit(0, 20);
        $query=$this->db->get();
        return $query->result_array();

    }

}

控制器文件夹中的posts.php

class Posts extends CI_Controller{

    function index(){

        $this->load->model('post');
        $data['posts'] = $this->post->get_posts();
        echo "<pre>";
            print_r($data['posts']);
        echo "</pre>";      

    }

}

它应该显示一个空数组,但它显示错误 404

【问题讨论】:

  • 如果您使用 Codeigniter 3.0 那么 post.php 控制器应该是 Post.php 不要在应用程序文件夹中触摸 htaccess 只在主目录中添加一个。
  • 此外,由于您没有在主目录中的配置广告集 htaccess 中删除 index.php,因此您的 url 需要具有 index.php example.com/index.php/controller
  • 你好,不知道你的意思,应该是这样 $this->load->model('Post'); 吗?
  • 我会将发布模型重命名为 Model_post.php,因为有时 codeigniter 会混淆控制器和模型必须有文件名和类名大写的第一个字母,然后您可以使用 $this-&gt;load-&gt;model('model_post') 和 @ 987654329@

标签: php codeigniter model-view-controller


【解决方案1】:

添加类似...的路线

 $route['posts'] = 'posts/index';

【讨论】:

  • 已编辑。问题与路线有关。如果您没有名为index 的方法,请从您可用的方法中选择合适的方法。我试图记住我是如何从历史上解决这些问题的。您是否传递了任何查询参数?
  • 还是不行,我编辑了我的问题并添加了我创建的函数。
【解决方案2】:

使用 codeigniter 3 时

所有控制器和模型都应该有第一个字母类名和文件名作为大写示例Welcome.php而不是welcome.php

对于您的模型,因为它与控制器同名。我会将模型名称更改为 Model_post

文件名:Model_post.php

<?php

class Model_post extends CI_Model {

    public function some_function() {

    }

}

这样codeigniter就不会混淆了。

后控制器将是

文件名:Post.php

<?php

class Post extends CI_Controller {

    public function __construct() {
       parent::__construct();
       $this->load->model('model_post');
    }

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

}

如果没有设置codeigniter / htaccess来删除index.php,那么你的url也需要在每个地方使用index.php。

http://localhost/project/index.php/post

http://www.example.com/index.php/post

注意:如果需要,请勿触摸应用程序文件夹中的 htaccess htaccess 在主目录中添加一个 Htaccess For Codeigniter

在 v3 之前的 codeigniter 之前版本,您无需担心控制器的 ucfirst,但现在您需要为版本 3 及更高版本担心。

【讨论】:

  • 类名和文件名的第一个字母为大写不会产生我目前正在处理的问题
  • 但我想问如果我们在应用程序文件夹中编辑.htacess 文件会发生什么
  • @AnmolRaghuvanshi 您使用的是 codeigniter 2 还是 3 当您想删除 index.php 时,您需要在主目录中添加一个 htaccess 以适应您的服务器
  • 我正在使用 CI 3 我已经在应用程序文件夹中编辑了 .htacess 文件,所以会出现什么类型的问题......
  • @AnmolRaghuvanshi 应用程序文件夹 htaccess 只是使该目录安全,因此不会绕过它。要删除 index.php,您需要一个将您的服务器安装在项目的主目录中。
【解决方案3】:

就我而言,这解决了问题:

进入 config/routes.php 并在第 52 行定义默认控制器;

如果您需要另一个函数而不是索引,我会从索引函数中调用该函数。但这取决于你。

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2016-12-11
    • 2020-07-14
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多