Route to multiple sub folders in CodeIgniter

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

I have a admin folder set up in my controllers directory, under that i have 3 seperate sub-folders with controllers inside of them.

-- Controllers ---- Admin ------ Dashboard -------- dashboard.php -------- file.php ------ Members -------- members.php -------- file.php ------ Settings -------- settings.php -------- file.php

I tried routing it in the routes.php file like this

$route['admin/(:any)/(:any)'] = 'admin/$1/$2'; $route['admin/(:any)'] = 'admin/$1/$1'; $route['admin'] = 'admin/index';

What do I do to fix this?

回答1:

"Out of the Box" codeigniter does not support multiple subdirectory levels in your controllers directory, just one.

There is a way to extend the routing class to support this, check this blog entry.



回答2:

This code was already on the internet but i modified it to make it work for codeigniter 2.1

See the old source here: http://glennpratama.wordpress.com/2009/10/20/multi-level-subfolder-for-controller-in-codeigniter/

Make a new file MY_Router.php in the application/core directory, copy the following code in it:

set_directory($segments[0]);             $segments = array_slice($segments, 1);              /* ----------- ADDED CODE ------------ */              while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0]))             {                 // Set the directory and remove it from the segment array             //$this->set_directory($this->directory . $segments[0]);             if (substr($this->directory, -1, 1) == '/')                 $this->directory = $this->directory . $segments[0];             else                 $this->directory = $this->directory . '/' . $segments[0];              $segments = array_slice($segments, 1);             }              if (substr($this->directory, -1, 1) != '/')                 $this->directory = $this->directory . '/';              /* ----------- END ------------ */              if (count($segments) > 0)             {                  if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().'/'.$segments[0].EXT))                 {                     show_404($this->fetch_directory().$segments[0]);                 }             }             else             {                 $this->set_class($this->default_controller);                 $this->set_method('index');                  if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().'/' .$this->default_controller.EXT))                 {                     $this->directory = '';                     return array();                 }              }              return $segments;         }          show_404($segments[0]);     } }


回答3:

For Codeigniter 3.x compatibility: The usage of the EXT constant has been deprecated since dropping support for PHP 4. There’s no longer a need to maintain different filename extensions and in this new CodeIgniter version (3.x), the EXT constant has been removed. Use just ‘.php’ instead.

So the new MY_Router.php:

set_directory($segments[0]);             $segments = array_slice($segments, 1);                      
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!