有一个“编辑”控制器来处理用户编辑?这种设计有意义吗?


Having an "edit" controller to deal with user editing? Does this design make sense?

这是流程:

  1. 用户创建基于文本的帖子。

  2. 用户编辑基于文本的帖子(显示包含帖子信息的编辑页面)

  3. 用户提交对帖子的更改(发送到帖子控制器的请求)

现在,如果我有多种类型的帖子,我必须在步骤 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()中,如果你想完全干掉它。

祝你好运。