如何使用路由仅使用文件夹名称访问控制器

时间:2017-09-26 22:45:13

标签: php codeigniter

如何仅使用文件夹名称访问控制器,控制器中存在文件夹。 文件夹名称是控制器文件夹中的admin。控制器是管理文件夹中的仪表板(php文件)。

$route['admin/(:any)']  = 'admin/dashboard';

htaccess的

RewriteEngine on
RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

我想使用:http://Website/admin访问仪表板(php文件)。但不工作。我thnik,我有上述路线问题。 enter image description here

工作路线

$route['(:any)'] = "admin/dashboard";

使用$route['(:any)']页面可以访问:http://Website/any-string-or-letter。但是如何仅使用http://Website/admin进行访问。

2 个答案:

答案 0 :(得分:1)

请按照以下步骤执行此操作:

  1. 在控制器文件夹application/controllers/admin
  2. 中创建一个文件夹
  3. 在文件夹中创建一个控制器。例如:application/controllers/admin/dashboard
  4. Dashboard.php

    <?php
    
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Dashboard extends CI_Controller {
    
        /**
         * Index Page for this controller.
         *
         */
    
    
        public function index()
        {
            $this->load->view('my-view');
            //$this->load->view('admin/my-view'); //If you are saving the views in a sub directory under views/admin/my-view.php
        }
    
    }
    

    my-view.php

    下创建application/controllers/views/my-view.php
    <h5>MY VIEW FILE CONTENT</h5>
    

    像这样访问这个控制器:如果你在localhost上,那就像:http://localhost/my-project/admin/dashboard/index

    的.htaccess

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /my-project
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
        RewriteRule ^(.*?)$ /my-project/index.php?/$1 [L]
    </IfModule>
    
    • *更新项目文件夹名称。

    routes.php文件

    $route['admin'] = 'admin/dashboard/index';
    

    *请尝试删除/评论除此之外的所有其他路线以避免冲突

答案 1 :(得分:0)

你现在可能遇到的问题是CodeIgniter期待代替(:any)的东西,所以当你试图去/ admin它失败,因为没有Admin.php控制器,你没有第二个URI段。试试这个:

$route['admin/(.+)'] = function ($x = NULL)
{
    return 'admin/dashboard';
};

可能需要考虑的另一件事是CI用户指南中有关子目录中控制器的说明,以及您可能有一个默认控制器:

  

每个子目录都可能包含一个默认控制器,如果URL只包含子目录,则会调用该控制器。只需在其中放置一个与application / config / routes.php文件中指定的'default_controller'名称相匹配的控制器。

指向该部分的链接:https://www.codeigniter.com/userguide3/general/controllers.html#organizing-your-controllers-into-sub-directories

这意味着如果你查看config / routes.php,如果你的default_controller是&#34; welcome&#34;,那么你也可以拥有一个名为application / controllers / admin / Welcome.php的控制器,如果没有其他匹配的控制器,则路由到/ admin的请求将会到达那里。

我认为这不是理想的。如果是我,我会在应用程序组织的方式中找出其他的东西。