Php 使用带有codeigniter的自定义命名控制器

Php 使用带有codeigniter的自定义命名控制器,php,codeigniter,controller,Php,Codeigniter,Controller,嗨,我正在开发一个使用管理环境和用户环境的应用程序。为了使我的代码和控制器更具可读性,我想为我的管理员和用户控制器使用某种前缀。或者,也可以为admin-en用户控制器使用不同的目录。不使用url中的确切名称来调用控制器 有人知道我的想法有没有解决的办法。 例如,我想使用:user.[controllername].php或user.[controllername].php 编辑: 因此,当我使用路由将用户控制器与管理控制器分离时,它会阻止我的模板解析器 例如,让我们假设url是:在正常情况下,

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

有人知道我的想法有没有解决的办法。 例如,我想使用:user.[controllername].php或user.[controllername].php

编辑:

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

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

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

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


提前感谢您分享知识

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

1.在application/core中创建两个名为“Admin\u Controller.php”和“User\u Controller.php”的文件,并带有以下类签名

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

在这些类中,您可以使用PHP逻辑做任何您想做的事情,只需将控制器扩展到Admin\u Controller或User\u Controller即可。 例如:
class-Home扩展了User\u-Controller{}
class-Dashboard扩展了Admin\u-Controller{}

2.您也可以使用routes.php简单地实现这一点

例如:


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

你可以用很多方法做到这一点

1.在application/core中创建两个名为“Admin\u Controller.php”和“User\u Controller.php”的文件,并带有以下类签名

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

在这些类中,您可以使用PHP逻辑做任何您想做的事情,只需将控制器扩展到Admin\u Controller或User\u Controller即可。 例如:
class-Home扩展了User\u-Controller{}
class-Dashboard扩展了Admin\u-Controller{}

2.您也可以使用routes.php简单地实现这一点

例如:


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

仅仅使用路线怎么样?如果愿意,您还可以创建一个文件夹,将
管理员
控制器与
用户
控制器物理分离。当您访问您的URL时,例如
example.com/admin/dashboard
(表示您已删除
index.php
),Codeigniter将在名为
admin
的文件夹中查找
dashboard
控制器。仅使用路由如何?如果愿意,您还可以创建一个文件夹,将
管理员
控制器与
用户
控制器物理分离。当您访问您的URL时,例如
example.com/admin/dashboard
(表示您已删除
index.php
),Codeigniter将在名为
admin
的文件夹中查找
dashboard
控制器。是否也可以不在URL之前添加任何额外内容?我还将自定义目录与smarty结合使用,smarty可以正常工作,但它也基于url结构构建我的模板,因此当我将某些内容附加到url时,应用程序会在错误的文件夹中查找模板文件。确定后,您需要将每个可能的请求映射到其各自的控制器。例如:
/home
将加载
主控制器
/dashboard
将加载
仪表板控制器
等。为此,只需使用file
MY_controller.php
和签名
MY_controller扩展CI_controller{}在application/core中创建一个新文件即可
在这个类中,只需使用一个方法
公共函数_remap(){}
就可以使用switch case进行适当的类调用。除此之外,您还可以在routes文件中执行此操作。是否也可以不在url前面附加任何内容?我还将自定义目录与smarty结合使用,smarty可以正常工作,但它也基于url结构构建我的模板,因此当我将某些内容附加到url时,应用程序会在错误的文件夹中查找模板文件。确定后,您需要将每个可能的请求映射到其各自的控制器。例如:
/home
将加载
主控制器
/dashboard
将加载
仪表板控制器
等。为此,只需使用file
MY_controller.php
和签名
MY_controller扩展CI_controller{}在application/core中创建一个新文件即可
在这个类中,只需使用一个方法
公共函数_remap(){}
就可以使用switch case进行适当的类调用。除此之外,您还可以在routes文件中执行此操作。
// for admin
$route['admin/(.+)'] = 'admin_$1';

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