Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在CodeIgniter中创建管理页面的最佳方法?_Php_Codeigniter_Access Control - Fatal编程技术网

Php 在CodeIgniter中创建管理页面的最佳方法?

Php 在CodeIgniter中创建管理页面的最佳方法?,php,codeigniter,access-control,Php,Codeigniter,Access Control,我正在CodeIgniter中开发一个应用程序,我想为应用程序中的几个对象创建管理页面,我想知道将这些对象放入MVC结构的更好方法是什么 想法1: 在每个控制器中,都有一个管理功能,并将我想要的所有管理页面添加到该功能中。 示例URL:domain.com/articles/admin 创意2 制作一个新的管理员控制器,它必须引用许多不同的模型,并将所有的管理员页面放在那里。 示例URL:domain.com/admin/articles 哪条路更好 编辑澄清:所谓管理功能,我指的是能够对任何对

我正在CodeIgniter中开发一个应用程序,我想为应用程序中的几个对象创建管理页面,我想知道将这些对象放入MVC结构的更好方法是什么

想法1: 在每个控制器中,都有一个管理功能,并将我想要的所有管理页面添加到该功能中。 示例URL:
domain.com/articles/admin

创意2 制作一个新的管理员控制器,它必须引用许多不同的模型,并将所有的管理员页面放在那里。 示例URL:
domain.com/admin/articles

哪条路更好


编辑澄清:所谓管理功能,我指的是能够对任何对象执行基本CRUD操作,并能够显示所有所述对象的列表。

取决于您所指的“管理”功能……通常,这被视为“编辑”视图


通常,您使用现有的控制器来提供“编辑”视图,允许授权用户进行编辑(在您的情况下,仅限管理员用户)。

看起来像是个人选择,我喜欢一切都集中化,因此管理员控制器将是我的赌注


这样,我就不必在修改管理员任务时打开5个不同的控制器。

最好在控制器文件夹中有一个管理员文件夹,您可以在其中访问您的管理,例如yoursite.com/admin/users

您的所有管理需求都将存在,所有方法都将通过检查用户权限得到保护,如下所示:

if ( ! $this->auth->logged_in(array('login', 'admin')))
{
    $this->session->set_flashdata('message', 'You do not have access to view this page');

    redirect('admin/users/login');
}

然后,“admin”文件夹外的所有控制器将仅用于查看,具体取决于您的站点类型等。。没有管理部分。

我会回应贾斯汀,让它成为各个控制器的一部分

您应该设置某种授权系统,各个控制器可以使用该系统来确定谁登录(用户名)以及他们拥有什么访问权限(管理员/成员/等等)

然后,视图将有条件地显示适当的链接,控制器将通过在向模型传递任何数据或呈现编辑视图之前检查身份验证来强制执行策略。在未经授权的访问中,可能会出现错误,或者只是使用非编辑视图进行渲染

这种方法似乎最有意义(至少对我来说),因为所有功能都存储在单个控制器中。将管理功能保留在一个管理控制器中意味着您每次添加新的(或删除某些内容)时都必须管理两个控制器(管理控制器和实际控制器)

如果您关心在每个控制器中进行身份验证检查,那么可以使用所有身份验证设置创建一个通用控制器类,然后让控制器扩展它。最后,单个控制器身份验证检查可以简单到:

function edit()
{
    if(!$this->auth()){
        //display auth error, or forward to view page
    }
}

当然,某种类型的ACL实现会使这更好,但我不相信CodeIgniter有一个“官方”ACL。

至少肯定是一个不同的控制器

我曾经认为我可以把所有的管理功能都放在一个控制器中,但随着我的程序的发展,我意识到我的管理部分需要多个控制器

因此,我在controllers文件夹中创建了一个名为“admin”的文件夹,并将所有管理控制器都放在其中。所以我的文件夹看起来像:

  • 应用
    • 控制器
      • front.php
      • welcome.php
      • 管理员
        • dashboard.php
        • useradmin.php
  • 等等
然而,这造成的一个问题是,当您在浏览器中键入时,它会返回404页。因此,转到“application/config/routes.php”文件并添加自定义路由:

$routes['admin'] = 'admin/dashboard/index';
想法2更好。 系统/应用程序/控制器/管理员


您将所有的管理员控制器都放在这里。

这里有一个详细的指南,介绍每种方法的优点和缺点:


在少数几张反对票中,有人愿意解释原因吗?这一点没有得到很好的推广。这里的问题是,您正在咀嚼大量不相关的代码。每次PHP引擎在控制器上运行时,它都必须编译后端中的所有内容,而不仅仅是与操作相关的内容。我可以提出相反的观点。管理区域不是流量密集型的,用户页面是,如果你为每个部分都搜索一个管理区域,引擎必须运行与用户完全无关的所有管理代码,因此是一种浪费。尽管如此,这与代码缓存的使用并不重要,你在每个方法中都这样做吗?您应该在控制器或基本控制器的构造函数中执行此操作,以避免重复。