在 CodeIgniter 中制作管理页面的最佳方法?
Posted
技术标签:
【中文标题】在 CodeIgniter 中制作管理页面的最佳方法?【英文标题】:Best way to make Admin pages in CodeIgniter? 【发布时间】:2010-12-14 18:45:29 【问题描述】:我正在使用 CodeIgniter 开发一个应用程序,我想为应用程序中的几个对象创建管理页面,我想知道将它们放入 MVC 结构的更好方法是什么。
想法 1:
在每个控制器中,有一个管理功能,并将我想要的所有管理页面添加到该功能中。
示例网址:domain.com/articles/admin
想法 2
制作一个新的管理控制器,它必须引用许多不同的模型,并将所有管理页面放在那里。
示例网址:domain.com/admin/articles
哪种方式更好?
为澄清而编辑:管理功能是指能够对任何对象执行基本的 CRUD 操作,并能够显示所有所述对象的列表。
【问题讨论】:
【参考方案1】:绝对是一个不同的控制器至少!
我曾经认为我可以将所有管理功能保留在一个控制器中,但随着程序的增长,我意识到我的管理部分需要多个控制器。
所以,我在我的控制器文件夹中创建了一个名为“admin”的文件夹,并将我所有的管理控制器都放在那里。所以我的文件夹看起来像:
申请 控制器 front.php welcome.php 管理员 dashboard.php useradmin.php 等等……然而,这会产生一个问题,当您在浏览器中键入 http://mysite.com/admin 时,它会返回一个 404 页面。因此,转到您的“application/config/routes.php”文件并添加自定义路由:
$routes['admin'] = 'admin/dashboard/index';
【讨论】:
【参考方案2】:我会回应 Justin 的观点,将其保留为各个控制器的一部分。
您应该设置某种授权系统,各个控制器可以使用该系统来确定谁登录(用户名)以及他们拥有什么访问权限(管理员/成员/等)。 Here's a SO thread on CodeIgniter Auth Classes.
然后视图将有条件地显示适当的链接,控制器将通过在将任何数据传递给模型或呈现编辑视图之前检查身份验证来强制执行策略。在未经授权的访问时,可能会呈现错误,或者只是使用非编辑视图呈现。
这种方法似乎最有意义(至少对我而言),因为所有功能都存储在单个控制器中。将管理功能保留在单个管理控制器中意味着您每次添加新内容(或删除某些内容)时都必须管理两个控制器(管理员和实际控制器)。
如果您担心在每个控制器中都进行身份验证检查,您可以创建一个包含所有身份验证设置的通用控制器类,然后让您的控制器扩展它。最后,单个控制器的身份验证检查可以很简单:
function edit()
if(!$this->auth())
//display auth error, or forward to view page
当然,某种 ACL 实现会更好,但我不相信 CodeIgniter 有“官方”ACL。
【讨论】:
在少数反对票中 - 有人愿意解释原因吗?【参考方案3】:在控制器文件夹中有一个管理文件夹是个好主意,您可以在其中访问您的管理,例如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”文件夹之外的所有控制器 - 根据您的站点类型 - 将仅用于查看等。没有管理部分。
【讨论】:
您在每种方法中都这样做?您应该在控制器或基本控制器的构造函数中执行此操作以节省重复。 philsturgeon.co.uk/news/2010/02/…【参考方案4】:想法 2 更好。 系统/应用程序/控制器/管理员
您将所有管理员控制器都保存在这里。
【讨论】:
【参考方案5】:以下是每种方法的优缺点的详尽指南:
http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter
【讨论】:
【参考方案6】:取决于您所说的“管理”功能……通常,这被认为是“编辑”视图。
通常,您使用现有控制器提供“编辑”视图,允许授权用户进行编辑(在您的情况下,仅限管理员用户)。
【讨论】:
【参考方案7】:看起来像是个人选择,我喜欢把所有东西都集中起来,所以管理控制器是我的选择。
这样我就不必在修改管理任务时打开 5 个不同的控制器。
【讨论】:
这个扩展不好。这里的问题是您将许多不相关的代码混在一起。每次 PHP 引擎在控制器上运行时,它都必须编译后端中的所有内容,而不仅仅是与操作相关的内容。 我可以反驳。管理区域不是流量密集型,用户页面是,如果您将每个部分的管理区域组合在一起,引擎必须运行每个与用户完全无关的管理代码,因此是浪费。不过,这对于使用代码缓存器并不重要。以上是关于在 CodeIgniter 中制作管理页面的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章
将特定页面限制为仅在 Codeigniter 中登录用户的最佳实践是啥?