路由到CodeIgniter中的多个子文件夹

Cod*_*Rob 8 php routes codeigniter codeigniter-url codeigniter-2

我在我的控制器目录中设置了一个管理文件夹,在其下面我有3个单独的子文件夹,里面有控制器.

-- Controllers
---- Admin
------ Dashboard
-------- dashboard.php
-------- file.php
------ Members
-------- members.php
-------- file.php
------ Settings
-------- settings.php
-------- file.php
Run Code Online (Sandbox Code Playgroud)

我尝试在routes.php文件中路由它,就像这样

$route['admin/(:any)/(:any)'] = 'admin/$1/$2';
$route['admin/(:any)'] = 'admin/$1/$1';
$route['admin'] = 'admin/index';
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

use*_*928 11

此代码已经在互联网上,但我修改它以使其适用于codeigniter 2.1

在这里查看旧资料来源:http: //glennpratama.wordpress.com/2009/10/20/multi-level-subfolder-for-controller-in-codeigniter/

在application/core目录中创建一个新文件MY_Router.php,复制下面的代码:

<?php

/*
 * Custom router function v 0.2
 *
 * Add functionality : read into more than one sub-folder
 *
 */

Class MY_Router extends CI_Router
{
    Function MY_Router()
    {
        parent::__construct();
    }

    function _validate_request($segments)
    {
        if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
        {
            return $segments;
        }

        if (is_dir(APPPATH.'controllers/'.$segments[0]))
        {
            $this->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]);
    }
}
Run Code Online (Sandbox Code Playgroud)


jon*_*ohn 5

“开箱即用”codeigniter 不支持控制器目录中的多个子目录级别,只有一个。

有一种方法可以扩展路由类来支持这一点,请查看此博客条目。

  • 在第 3 版中仍然如此吗? (2认同)