从控制器开始。使用 Codeigniter——您可以在模型中执行的任何操作,都可以在控制器中执行。最简单的开始方式——只需将你的方法放在控制器中并设置一个简单的视图文件。
始终进行简单的健全性检查,以确保基础知识是正确的。设置一个控制器并回显一些文本。
在控制器中尝试:
- 使用活动记录命令从数据库中获取博客文章
- 将博客文章结果传递给 $Data
- 对于每一步,在控制器中回显某些内容以确认其工作
接下来——尝试使用 $Data 将博客结果传递给视图。
在其工作并且您了解基础知识之后 - 然后开始将您的方法推送到模型。当你重构和清理时,你的控制器会变得“更薄”。
通常对于博客文章,您将拥有一个模型,该模型将返回博客文章,并且还可能具有您的插入/更新/删除方法。我说可能是因为拥有一个只显示博客文章的公共博客控制器通常更有意义。然后是一个单独的博客管理控制器——它只对登录的用户可用。
这两个控制器——可以共享同一个博客模型。因此,例如在管理屏幕上显示博客文章 - 您可以使用与在公共页面上显示文章相同的方法。而您可能有一个管理员博客模型——它具有创建/更新/删除方法。
这样,您从一开始就强制执行非常明确的用户角色分离——查看公共博客的人不应该能够删除帖子。公开秀博客类不“负责”编辑。
这是我正在努力解决的问题——就像展示博客的常规方法是将所有方法放在一起。就“我们可以用博客文章做什么”而言,这是有道理的——但就用户角色而言,它没有任何意义。
好的下一步 - 处理您的创建、更新和删除方法。
接下来尝试创建您的登录方法。使登录过程分离控制器/模型/视图。
最终,您可以在博客管理类的构造函数中调用一个方法来检查以确保用户已登录 - 否则会将他们重定向到登录页面。这样您就不必在视图文件等中一遍又一遍地检查以确保它们被授权。
(强烈推荐net tuts网站上的免费codeigniter教程系列)
更杂乱无章:
从参与者(用户、角色)的角度来看这个过程——对我来说有助于澄清控制链应该是什么。真正关键的角色——比如有权删除所有博客文章的管理员——系统应该知道该角色在班级的顶部。
最好的“最坏的例子”是“这是超级管理员吗?” 检查视图代码。视图不应该知道有关管理员角色的任何信息。但是当您在某个视图文件中引用管理员角色时会更糟糕——当您想以某种方式更改该管理员角色时会发生什么?现在你必须进入你所有的视图文件!
类和方法名称 - 我正朝着不在 URL 中透露任何业务或 crud 或字段或任何其他类型的业务信息的方向发展。没有名词没有动词没有标识。尽可能简单,只有很少的公共网址“门”进入应用程序。
奇妙的是,codeigniter 可以很容易地将您的方法设为私有。对于关键页面:仅使用类中的公共索引方法进行重定向,并将所有其他方法设为私有。
使用直接指向私有方法的路由。或具有广泛名称的公共方法,如果成功 - 就像您已经确认了他们的凭据 - 转到类中的私有方法,如 $this->_showAdminPage()
这就是定义一个角色(如博客编辑器)的地方,从功能的角度来看,事情会变得非常清晰,并保持有价值的业务知识的私密性。