8

我正在使用 CodeIgniter 开发一个应用程序,并且我想为应用程序中的几个对象提供管理页面,我想知道将它们放入 MVC 结构的更好方法是什么。

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

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

哪种方式会更好?

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

4

7 回答 7

6

至少绝对是一个不同的控制器!

我曾经认为我可以将所有管理功能保留在一个控制器中,但随着程序的增长,我意识到我的管理部分需要多个控制器。

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

  • 应用
    • 控制器
      • 前台.php
      • 欢迎.php
      • 行政
        • 仪表板.php
        • 用户管理员.php
  • ETC...

然而,这产生的一个问题是,当您在浏览器中键入http://mysite.com/admin时,它会返回一个 404 页面。因此,转到您的“application/config/routes.php”文件并添加自定义路由:

$routes['admin'] = 'admin/dashboard/index';
于 2009-11-10T13:33:17.437 回答
2

最好在控制器文件夹中有一个管理文件夹,您可以在其中访问您的管理,例如 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');
}

然后“管理”文件夹之外的所有控制器 - 根据您的站点类型 - 将仅用于查看等。没有管理部分。

于 2009-11-10T01:43:18.053 回答
2

我会呼应 Justin 将其保留为单个控制器的一部分。

您应该设置某种授权系统,供各个控制器使用,以便登录(用户名)以及他们拥有什么访问权限(管理员/成员/等)。这是 CodeIgniter Auth Classes 上的 SO 线程

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

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

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

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

当然,某种 ACL 实现会使这变得更好,但我不相信 CodeIgniter 有“官方”ACL。

于 2009-11-10T01:57:58.477 回答
2

想法2更好。系统/应用程序/控制器/管理员

你把所有的管理控制器都放在这里。

于 2009-11-10T13:44:03.897 回答
2

以下是每种方法的优缺点的详尽指南:

http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter

于 2010-10-01T12:02:27.633 回答
1

根据您所说的“管理员”功能的含义……通常,这被认为是“编辑”视图。

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

于 2009-11-09T20:25:37.930 回答
0

看起来像是个人选择,我喜欢把所有东西都集中起来,所以管理控制器是我的选择。

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

于 2009-11-09T21:32:53.973 回答