Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Codeigniter 3.0.0 - error 404 page not found

This is my first php framework. I have a php file in my controller which is posts.php but when I tried to run it localhost/codeigniter/index.php/posts, it displays error 404

.htaccess inside application folder

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

autoload.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 in model folder

    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 in controller folder

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>";      

    }

}

It should display an empty array but it shows error 404 instead

like image 495
rendell Avatar asked Jul 17 '15 14:07

rendell


2 Answers

Add a route like...

 $route['posts'] = 'posts/index';
like image 30
Mike Miller Avatar answered Sep 27 '22 22:09

Mike Miller


When using codeigniter 3

All controllers and models should have there first letter of class name and file name as upper case example Welcome.php and not welcome.php

For your model because it is the same name as controller. I would change model name to Model_post

Filename: Model_post.php

<?php

class Model_post extends CI_Model {

    public function some_function() {

    }

}

That way codeigniter will not get confused.

Post Controller would be

Filename: 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();
   }

}

Also in your url if not set up codeigniter / htaccess to remove index.php then your url will need to use index.php every where.

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

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

Note: do not touch the htaccess in the application folder if you need htaccess add one in main directory Htaccess For Codeigniter

Previous versions of codeigniter before v3 you did not need to worry about ucfirst for controllers but now you do for version 3 and above.

like image 175
Mr. ED Avatar answered Sep 27 '22 22:09

Mr. ED