【问题标题】:Using custom named controllers with codeigniter使用带有 codeigniter 的自定义命名控制器
【发布时间】:2016-12-29 12:21:19
【问题描述】:

您好,我正在开发一个使用管理环境和用户环境的应用程序。为了使我的代码和控制器更具可读性,我想为我的管理员和用户控制器使用某种前缀。或者可能为 admin 和用户控制器使用不同的目录。不使用 url 中的确切名称来调用控制器。

有没有人知道是否有办法做到这一点或解决我的想法。 例如我想使用:user.[controllername].php 或 user_[controllername].php

编辑:

因此,当我使用路由将用户控制器与管理控制器分开时,它会阻止我的模板解析器。

例如,假设 url 是:http://myapplication.com/user/profile 在正常情况下这将调用用户控制器和函数配置文件。我的模板解析器查找文件夹用户并检查是否有 level1.tpl 文件。 假设我们要编辑此配置文件,url 将是:http://myapplication.com/user/profile/edit/1 现在它将在文件夹用户中搜索 level2.tpl 文件并调用 id 为 1 的函数编辑。

路由的问题是它在我不想要的 url 前面添加了一些东西,因为它会在错误的文件夹中搜索,例如当我们使用 admin/dashboard 时,它会在文件夹 admin 而不是文件夹仪表板中查找.

所以基本上我只需要告诉应用程序使用控制器所在的不同目录或根据登录的用户类型使用不同的文件名。

提前感谢您分享知识。

【问题讨论】:

  • 如果您愿意,您还可以创建一个文件夹,让您的 admin 控制器与 user 控制器物理分离。当您访问您的网址时,例如example.com/admin/dashboard(假设您删除了index.php),Codeigniter 将在名为admin 的文件夹中查找Dashboard 控制器。

标签: php codeigniter controller


【解决方案1】:

您可以通过多种方式做到这一点。

1. 在应用程序/核心中创建两个名为“Admin_Controller.php”和“User_Controller.php”的文件,具有以下类签名,

class Admin_Controller extends CI_Controller
{    
    public function __construct()
    {
        parent::__construct();
    }
}

class User_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

在这些类中,您可以使用 PHP 逻辑来做任何您想做的事情,只需将控制器扩展为 Admin_Controller 或 User_Controller。 例如:class Home extends User_Controller {}class Dashboard extends Admin_Controller {}

2.你也可以简单地用 routes.php 做到这一点

例如:

// for admin
$route['admin/(.+)'] = 'admin_$1';

// for frontend
$route['(.+)'] = 'user_$1';

我希望这能给你一些想法。

【讨论】:

  • 是否也可以不在 url 中添加任何额外内容?我还为我的模板与 smarty 结合使用自定义目录,它工作得很好,但它也基于 url 结构构建我的模板,所以当我向 url 附加一些内容时,应用程序会在模板文件的错误文件夹中查找。
  • 好的,那么您需要将每个可能的请求映射到其各自的控制器。例如:/home 将加载Home controller/dashboard 将加载Dashboard controller 等。为此,只需在应用程序/核心中创建一个新文件,文件MY_Controller.php 带有签名MY_Controller extends CI_Controller {} 在此类中只需使用一个方法public function _remap() {} 您可以在其中使用 switch case 进行适当的类调用。除此之外,您还可以在路由文件中执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
相关资源
最近更新 更多