这是流程:
-
用户创建基于文本的帖子。
-
用户编辑基于文本的帖子(显示包含帖子信息的编辑页面)
-
用户提交对帖子的更改(发送到帖子控制器的请求)
现在,如果我有多种类型的帖子,我必须在步骤 2 和 3 中检查用户是否确实在更新正确类型的帖子,因为有人很可能会更改 URL 以编辑 A 类型的帖子,而它实际上是 B 类型。这会导致大量冗余代码,例如...
if(user is indeed the editor && the post type is correct) show the edit page
我认为拥有一个 EDIT 控制器来执行构造函数(或者可能是基类?)中所需的所有验证,然后调用该方法会很有意义。您是否遇到过类似的问题 - 如果没有,这是否具有任何设计意义?
CodeIgniter 是一个 MVC。这意味着控制器充当模型(数据)和视图(前端)之间的中间人。"编辑"是您对对象(如数据)执行的操作。数据对象应该在控制器中组织,该控制器从模型中调用实际的编辑函数。
我假设你有一个后控制器。它的核心应该是基本的 CRUD 功能,例如添加和编辑帖子。它应该看起来像这样:
class Post extends CI_Controller
{
function __construct()
{
parent::__construct();
}
function index()
{
// List all posts, perhaps?
}
function add()
{
// Add a post
}
function edit($post_id)
{
// Edit a post
}
function view($post_id)
{
// View a post
}
}
这将为您提供以下页面:
- http://example.com/post
- http://example.com/post/add
- http://example.com/post/view/1
- http://example.com/post/edit/1
检查用户权限是它自己的章节。如果您使用的是像 Tank Auth 这样的库,您可以像这样检查权限:
if ($this->tank_auth->is_logged_in()) {
// Do stuff
}
这应该在每个函数的开头 - 或者在__construct()
中,如果你想完全干掉它。
祝你好运。