4

I have the CodeIgniter controller file, placed in here

controllers/public/Pubweb.php

and I want to set that file as my default controller, but when I change the default controller route value, it will goes error. My route code :

$route['default_controller'] = 'public/pubweb';

Can someone help me?

10
  • can you post the exact error you got? Runtime, syntax etc? Commented Jan 11, 2016 at 2:42
  • The error said 404 Page Not Found, The page you requested was not found. But i had the Pubweb.php already in my folder Commented Jan 11, 2016 at 2:46
  • Are you navigating to the correct url? Assuming you are not modifying the url (to remove the index.php) you would want to: http:[YOUR URL]/index.php/public/pubweb/ Commented Jan 11, 2016 at 2:55
  • What's your controller class name ? may be it's different whit your controller file name. Commented Jan 11, 2016 at 2:58
  • @James Umm i used .htaccess to remove the index.php but i think it doesn't wrong with my .htaccess file because i can access all file controller except my default controller Commented Jan 11, 2016 at 3:05

2 Answers 2

5

On CodeIgniter 3 It does not allow you to have a sub folder on $route['default_controller'] you will instead need to create a MY_Router.php file like below.

You will need to create a MY_Router.php in

application > core > MY_Router.php

Here is a MY_Router.php file that should allow you to use $route['default_controller'] = 'public/pubweb'; in Codeigniter 3

<?php

class MY_Router extends CI_Router {
    protected function _set_default_controller() {

        if (empty($this->default_controller)) {

            show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
        }
        // Is the method being specified?
        if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) {
            $method = 'index';
        }

        // This is what I added, checks if the class is a directory
        if( is_dir(APPPATH.'controllers/'.$class) ) {

            // Set the class as the directory

            $this->set_directory($class);

            // $method is the class

            $class = $method;

            // Re check for slash if method has been set

            if (sscanf($method, '%[^/]/%s', $class, $method) !== 2) {
                $method = 'index';
            }
        }

        if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) {

            // This will trigger 404 later

            return;
        }
        $this->set_class($class);
        $this->set_method($method);
        // Assign routed segments, index starting from 1
        $this->uri->rsegments = array(
            1 => $class,
            2 => $method
        );
        log_message('debug', 'No URI present. Default controller set.');
    }
}

Make sure your files have first letter upper case on file name and class name. Pubweb.php and class Pubweb extends CI_Controller {}

Hope this helps!

Sign up to request clarification or add additional context in comments.

Comments

1

You can create a new file in the main controllers folder for routing purpose. for example, I have a directory structure like 'controllers/coming/Commingsoon.php'. if I want to run Commingsoon as my default controller so i will do this:

create new file in controllers folder: Main_controller.php:

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

    public function index(){    
        redirect('comming'); 
    }
} 

and in routes.php file:

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

$route['comming'] = 'comming/commingsoon/index';

hope this will help...

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.