简体   繁体   中英

Routing controllers in subfolders using CodeIgniter

since i want to separate the frontend and backend of the system. i have created 2 folders inside controllers as frontend and backend

Below is the structure of my controller folder

controller
 --frontend
   ---store.php
   ---processing.php
   ---profile.php
   ---authenticate.php
   ---register.php 

 --backend
   ---authenticate.php
   ---stats.php
   ---users.php
   ---property_manage.php
   ---register.php 

i can access the functions by using

frontend/store/add
frontend/store/manage
......

backend/stats/sales
backend/stats/payments
.....

but i want to take off the frontend and the backend segments from the url.

I checked the routing feature in codeigniter but according to my knowledge i need to individually specify each route. Since i have about 12 controllers and each has around 10 -15 functions i might have to specify each and every function to the route.

is there any other efficient way to achieve using routing or any other way? (without using any htaccess)

Do this:

$route['store/(:any)'] = 'frontend/store/$1';
$route['processing/(:any)'] = 'frontend/processing/$1';
$route['profile/(:any)'] = 'frontend/profile/$1';

Same for backend :

$route['backend/(:any)'] = 'backend/authenticate/$1';

You don't have to create each rule in routes.php for every function of the controller, rather one rule per controller will be enough as mentioned above.

URI Routing : CodeIgniter User Guide

$1 represent the first expression, here (:any) is the expression, you can have multiple expression on each rule, and expression is represented as $1 , $2 and so on on the other side.

Similarly, (:num) will match a segment containing only numbers, (:any) will match a segment containing any character, (\\d+) will match any digit, ([az]+) will match any alpha text.

You have to be able to differentiate the frontend from the backend somehow. Maybe set a route that forwards any uri with "admin" to the backend, and anything without "admin" to the frontend.

For Front-End you can add this in routes.php:

$this->set_directory( "frontend" );

so in browser URL, there is no need to include "frontend"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM