【问题标题】:how to access controller only with folder name using route如何使用路由仅使用文件夹名称访问控制器
【发布时间】:2017-09-26 22:45:13
【问题描述】:

如何仅通过文件夹名称访问控制器,文件夹存在于控制器中。 文件夹名称是控制器文件夹内的管理员。控制器是管理文件夹内的仪表板(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 文件)。但不工作。我想,我对上面的路线有疑问。

工作路线

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

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

【问题讨论】:

  • mod_rewrite 是你哥们...调查一下。
  • @Vickel,没什么不同
  • @jorge Campos,我已经用 htaccess 文件更新了我的问题。
  • 那是什么问题,只是得到一个 404 错误?

标签: php codeigniter


【解决方案1】:

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

  1. 在控制器文件夹application/controllers/admin 内创建一个文件夹
  2. 在您的文件夹中创建一个控制器。例如:application/controllers/admin/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
    }

}

application/controllers/views/my-view.php下创建my-view.php

<h5>MY VIEW FILE CONTENT</h5>

像这样访问这个控制器:如果你在本地主机上,那么它会像: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';

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

【讨论】:

  • 如何调用视图,您在 Dashboard.php 中注释了“此控制器的索引页面”行。
  • 如何使用 url(localhost/my-project/admin) 而不是完整的 url(localhost/my-project/admin/dashboard/index) 访问控制器?
  • application/views/my-view.php下创建一个视图文件并使用$this-&gt;load-&gt;view('my-view');这个函数调用
  • 是的,我有我的视图文件视图文件夹并调用 Dashboard.php 文件。但是 Dashboard.php 文件显示错误,请您使用调用视图更新 Dashboard.php 文件。
  • 工作网址:localhost/my-project/admin/dashboard/index,但短网址不起作用:localhost/my-project/admin。
【解决方案2】:

您现在可能遇到的问题是 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 是“welcome”,那么您还可以拥有一个名为 application/controllers/admin/Welcome.php 的控制器,并将请求路由到 /admin如果没有其他匹配的控制器会去那里。

我认为这些都不理想。如果是我,我会在应用组织方面想出一些别的办法。

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2012-12-06
    相关资源
    最近更新 更多