我正在使用CodeIgniter中的一个应用程序,我想要为应用程序中的几个对象提供管理页面,我想知道将这些应用程序放入MVC结构的更好方法是什么.
想法1:
在每个控制器中,有一个管理功能,并将我想要的所有管理页面添加到该功能中.
示例网址:domain.com/articles/admin
想法2
创建一个新的管理控制器,它必须引用许多不同的模型,并将所有管理页面放在那里.
示例网址:domain.com/admin/articles
哪种方式会更好?
我会回应贾斯汀,让它成为各个控制器的一部分.
您应该设置某种授权系统,各个控制器可以使用这些系统来登录(用户名)以及他们拥有的访问权限(admin / member / etc.). Here’s a SO thread on CodeIgniter Auth Classes.
然后,视图将有条件地显示相应的链接,并且控制器将通过在将任何数据传递到模型或呈现编辑视图之前检查auth来强制执行策略.在未经授权的访问时,可以呈现错误,或者仅使用非编辑视图进行渲染.
这种方法似乎最有意义(至少对我而言)因为所有功能都存储在单独的控制器中.将管理功能保存在单个管理控制器中意味着每次添加一些新的(或删除某些内容)时,您必须管理两个控制器(管理员和实际控制器).
如果您担心在每个控制器中进行auth检查,您可以创建一个包含所有auth设置的通用控制器类,然后让控制器扩展它.最后,单独的控制器验证检查可以像下面这样简单:
function edit() { if(!$this->auth()){ //display auth error,or forward to view page } }
当然,某种ACL实现会使这更好,但我不相信CodeIgniter有一个’官方’ACL.