{"id":1517,"date":"2017-05-24T16:31:01","date_gmt":"2017-05-24T11:01:01","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=1517"},"modified":"2026-09-08T10:53:41","modified_gmt":"2026-09-08T05:23:41","slug":"use-sub-folder-default-controller-route-codeigniter-3","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/use-sub-folder-default-controller-route-codeigniter-3\/","title":{"rendered":"How To Use A Sub Folder In Default Controller Route In Codeigniter 3"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By default, CodeIgniter 3 expects the default controller to be located directly inside the <code>controllers<\/code> directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide explains how to modify the CodeIgniter 3 Router so that the <strong>default controller can be placed inside a subfolder<\/strong> within the controllers directory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, make sure:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodeIgniter 3 is installed.<\/li>\n\n\n\n<li>You have access to the application source code.<\/li>\n\n\n\n<li>You have permission to modify the CodeIgniter system files.<\/li>\n\n\n\n<li>A controller is available inside a subfolder under <code>application\/controllers<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Open the Router.php File<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the following file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">application\/system\/Router.php<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Locate the mentioned section of the file.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Modify the Default Controller Parsing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Around line <strong>298<\/strong>, locate:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if (sscanf($this->default_controller, '%[^\/]\/%s', $class, $method) !== 2)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace it with:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if (!sscanf($this->default_controller, '%[^\/]\/%[^\/]\/%s', $directory, $class, $method) !== 2)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This modification allows the default controller route to include a subfolder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Modify the Controller File Path<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Around line <strong>303<\/strong>, locate:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if ( ! file_exists(APPPATH.'controllers\/'.$this->directory.ucfirst($class).'.php'))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace it with:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if ( ! file_exists(APPPATH.'controllers'. DIRECTORY_SEPARATOR . $directory. DIRECTORY_SEPARATOR .ucfirst($class).'.php'))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This changes the controller path check so that CodeIgniter can locate the controller inside the specified subfolder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Set the Controller Directory<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$this->set_class($class);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">add the following line:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$this->set_directory($directory);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The modified section should therefore set the directory before setting the controller class.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Configure the Default Controller<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the Router changes are made, configure the default controller value with the required directory structure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, if your controller is located at:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">application\/controllers\/admin\/Home.php<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">the default controller can be configured using the subfolder and controller name.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CodeIgniter 3 normally expects the default controller to be directly under the <code>controllers<\/code> directory. By modifying the Router configuration, you can allow the default controller to reside inside a subfolder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is useful when organizing controllers into separate directories, especially for larger CodeIgniter applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQs<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">1. Where should the Router file be modified?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Open:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">application\/system\/Router.php<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and update the specified sections.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Why use a subfolder for controllers?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Subfolders help organize controllers into logical groups, particularly in larger applications.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. Which method is used to set the controller directory?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$this->set_directory($directory);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">before setting the controller class.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Does this change the CodeIgniter core files?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. This approach modifies <code>Router.php<\/code>, which is part of the CodeIgniter system files. Keep a backup of the original file before making changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related Articles<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Send Email Using HTML Templates in CodeIgniter<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Learn how to send emails using HTML templates in a CodeIgniter application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/send-email-using-html-templates-codeigniter\/\">https:\/\/pheonixsolutions.com\/blog\/send-email-using-html-templates-codeigniter\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Talk to our experts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Looking for the right technology solution for your business? Our team of experts can help you with development, cloud, DevOps, design, and a wide range of other technology needs. Get in touch with our team&nbsp;<a href=\"https:\/\/pheonixsolutions.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction By default, CodeIgniter 3 expects the default controller to be located directly inside the controllers directory. This guide explains [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1024],"tags":[],"class_list":["post-1517","post","type-post","status-publish","format-standard","hentry","category-security","psol-cat-security"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-ot","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=1517"}],"version-history":[{"count":2,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1517\/revisions"}],"predecessor-version":[{"id":11520,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1517\/revisions\/11520"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=1517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=1517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=1517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}