使用一个带有codeigniter的控制器路由所有页面

I'm a codeigniter newbie.

I'm triyng to create one controller that control every url in my site; I'm going to explain what i mean:

I've this views folder structure:

-front
--parts
    header.php
    footer.php
   index.php
   login.php
   register.php

so if on my site example.com I want to go on login page, simply I'll go on example.com/login.

In controllers folder till now, I had a controller for every single page (HomeController.php, LoginController.php, RegisterController.php). Now I want to change strategy and have one controller to govern all my pages.

After some research on Google and Stack overflow, I've found this thread:

Strategy to route to pages in codeigniter

So I've decided to follow that hints and I've build Pages.php controller:

defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );

class Pages extends CI_Controller {

    function _remap( $method )
    {
        is_file( APPPATH . 'views/front/' . $method . '.php' ) OR show_404();
        $this->load->view( $method );
    }

}

and in my routes.php:

$route['default_controller'] = 'welcome';
$route['pages'] = "pages/$1";
$route['(:any)'] = "pages/$1";

But I'm not be able to make it work.

In few words I whant create one controller that automatically create url if i create a new file in views/front folder.

I've readed CI docs and a bunch of question on StackOverflow, I've testing different hints, and maybe an answer somewhere, but I'm not finding yet.

I'm in trouble about this by days, maybe I'm missing something basilar in this concept.

Someone could help me to clearify this process?

You can do as below

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

$route['pages']="pages/index";
$route['pages/login']="pages/login";
$route['pages/register']="pages/register";

Your Controller will be like this:

defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );

class Pages extends CI_Controller {

function _remap( $method )
{
    is_file( APPPATH . 'views/front/' . $method . '.php' ) OR show_404();
    $this->load->view( $method );
}

  public function index() {
    $this->load->view('front/index', $data);
}
public function login() {

}

public function register() {

}

}

Your index.php view should like this:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>XYZ</title>
        <?php $this->load->view('front//header'); ?>
     </head>
     <body>

    <!-- topbar starts -->
    <?php $this->load->view('front/sections/top-nav.php'); ?>
    <!-- topbar ends -->

    <div class="ch-container">
        <div class="row">

            <!-- left menu starts -->
            <?php $this->load->view('front/sections/leftmenu.php'); ?>
            <!-- left menu ends -->


        </div><!--/fluid-row-->

        <!-- Ad ends -->
        <?php $this->load->view('front/sections/footer.php'); ?>
    </div><!--/.fluid-container-->

    <!-- external javascript -->
    <?php $this->load->view('front/sections/footerjs.php'); ?>
</body>

Or you can be load:

public function index() {
     $this->load->view('front/header');
     $this->load->view('front/index', $data);
     $this->load->view('front/footer')
}