【发布时间】:2012-11-20 00:04:06
【问题描述】:
我有一些函数可以管理控制器文件中某些控制器的访问级别。
我决定把它们带到图书馆或帮手那里。
由于它们主要是程序性的,我决定使用助手。
这是控制器文件中的原始方法(其他是access_level_member,access_level_moderator等)
function access_level_admin() {
if (!$this->session->userdata('loggedin')) {
$this->session->set_flashdata('warning', 'Not logged in.');
redirect('/start_page', 'refresh');
}
if (!$this->session->userdata('admin')) {
$this->session->set_flashdata('warning', 'Access Denied!');
redirect('/start_page', 'refresh');
}
这里有一个助手。
function access_level_admin() {
$CI =& get_instance();
if (!$CI->session->userdata('loggedin')) {
$CI->session->set_flashdata('warning', 'Not logged in.');
redirect('/start_page', 'refresh');
}
if (!$CI->session->userdata('admin')) {
$CI->session->set_flashdata('warning', 'Access Denied!');
redirect('/start_page', 'refresh');
}
所以我的问题是,将它放在库或助手中是更好的主意吗?可以使用 $CI =& get_instance();在助手中。
有更好的想法或建议吗?
【问题讨论】:
-
我会将它们放在库(或模型)中,因为它们不是“辅助函数”——它可以帮助你做某事——但这些函数对你的应用程序至关重要——我会放置它们在某些身份验证库或身份验证模型中。至于在帮助程序中使用 get_instance() ,这是非常强制性的,因为您无权访问那里的 CI 超级对象(没有 $this 可用)
-
@Damien Pirsy 我尊重推理,但是如果您的应用程序依赖于帮助程序,那么帮助程序在任何应用程序中都与库一样重要。例如,我使用 form_helper 构建表单。现在,我将助手视为放置函数的地方,这些函数或多或少相互独立,并且不需要使用对象。不过我可能是错的。还要感谢 get_instance() 的澄清。
-
我同意@Damien Pirsy。我会把它们放在某种
User模型中。$user->isAdmin()可读、简单、直接。 -
如果你问我,这种功能属于 MY_Controller 甚至 MY_Session。这不是数据库功能,所以我个人没有在模型中看到它,并且您希望每次加载页面时都调用它,老实说,我真的不明白它属于模型的 cmets。
-
@Rick Calder 即使 CodeIgniter 建议使用模型作为数据库交互类,我也不这么认为。我更喜欢将模型视为业务逻辑的持有者。在我看来,用户是网站业务的一部分。这也是我作为评论而不是作为答案发布的原因。这是一种意见,我认为没有明确的答案。 (除了
$CI部分;正如已经回答的那样。)希望这可以帮助您理解我为什么要为它创建一个模型。 :)
标签: php codeigniter libraries helpers controllers