Search code examples
phpcodeignitercodeigniter-routing

Codeigniter - views in subfolders routes


For organizational purposes I need to have subfolders in my views directory. For example for managing login / registration: views/login_reg/login.php and views/login_reg/register.php.

In my URI want to see: www.mysite.com/login or www.mysite.com/register instead of www.mysite.com/login_reg/login.

I have tried the following in routes:

$route['(:any)/login'] = 'login_reg/login';

Which does not work.

EDIT:

A simple example to elaborate further:

//Controller: login_reg.php

class Login_reg{

    function login(){
        $this->load->view('login_reg/login');
    }

    function register(){
        $this->load->view('login_reg/register');
    }

}

 //Routes:
 $route['login_reg/(:any)'] = 'login_reg/$1';

So my URI looks like this: www.mysite.com/login_reg/login, or www.mysite.com/login_reg/register

So I want one controller to manage all login / registration related views. But I do not want to see the controller name in the URI. Is this possible? Or is the best approach to have a controller for login, a controller for registration, a controller for password changing etc? This seems a bit excessive. I want to have my files well organised into related directories as this is part of a very large site.


Solution

  • Here you don't need routing at all.

    Simply add your folder name while loading view.

    For example your controller name for login is like

    function login()
    {
      //code goes here
      $this->load->view('login_reg/login');
    }
    

    and similar for register.

    Hope this helps you.Feel free to let me know if you further queries.

    --- Update ---

    To hide controller name make chanes in route.php like this;

    $route['login'] = 'login_reg/login';
    $route['register'] = 'login_reg/register';
    

    and your url will go like this now :

    http://yourwebsite.com/login