【问题标题】:when should i use multiple controllers in mvc?我什么时候应该在 mvc 中使用多个控制器?
【发布时间】:2010-04-13 02:44:23
【问题描述】:

您是否有时想在 mvc 中使用多个控制器?

例如。

/controllers/foo.php

/controllers/bar.php

/controllers/foo/baz1.php

/controllers/foo/baz2.php

/controllers/bar/baz1.php

/controllers/bar/baz2.php

有人可以举一些我可能想要这样做的例子以及一些示例控制器名称。

我想到的一个场合可能是当您拥有一个主站点(针对用户)和一个管理站点(针对客户)时。

感谢所有反馈和建议

【问题讨论】:

    标签: php model-view-controller


    【解决方案1】:

    通常控制器处理模型,模型代表相应的数据库表。因此,如果您有表用户和帖子,您的应用程序将有模型用户和帖子,因此控制器用户和帖子。这是典型的 RoR 方式,在许多 PHP MVC 框架中使用。此类应用程序中的 URL 如下所示:

    /controller/action/parameter1/parameter2/...
    i.e.
    /users/edit/1/
    or
    /posts/new/
    

    而actions对应于控制器类的方法。实际上,我认为它已成为 MVC 架构中事实上的标准,因为它看起来自然且合乎逻辑。

    【讨论】:

    • 但是如果你想做一个不会只访问一个表,而是多个表的事情怎么办。例如。如果我创建一个已标记的线程,则它跨越 3 个表(线程、标签和 thread_tag_map)。典型的多对多关系。将使用什么控制器,以及什么型号?你能描述一下这种情况下的流程吗?
    • 模型相互关联。想象一下,如果您使用 /posts/view/1/ 显示帖子。表示使用的controller是Posts,model是Post,WHICH访问的是相关模型Tag和Comment。相关模型可以访问彼此的方法来检索数据。
    【解决方案2】:

    几乎每当您有不同的任务要完成时。如果您有涉及处理用户的内容,请将您的控制器命名为 users.whatever,然后适当地命名操作(创建、编辑、更新、删除、搜索等)。如果你有一个只做搜索的东西,把它命名为 search.whatever。等等。记住这类事情的一种简单方法是来自 RESTful RFC(抱歉,不知道那个的实际 RFC 编号是什么),类似于something.com/noun/verb where noun == the all - 包含此控制器处理的“事物”和动词 == 正在执行的操作(见上文)。这至少是一种方法。

    【讨论】:

      【解决方案3】:

      查看 Nerd Dinner 的来源,http://nerddinner.codeplex.com/,有多个控制器。

      【讨论】:

        【解决方案4】:

        在您的应用程序中,如果您使用的是 User、Employee、Department,那么您将在 3 个类中定义它们,对吗?现在为每个这些类制作控制器:UserController、EmployeeController、DepartmentController 等。

        示例:

        用户/添加/
        用户/编辑/1/
        用户/删除/1/

        员工/添加/
        员工/编辑/1/
        员工/删除/1/

        部门/添加/
        部门/编辑/1/
        部门/删除/1/

        【讨论】:

        • 但是如果我得到了一切的方法,用户不能在浏览器中输入这个,它会删除东西吗?
        • 你必须检查请求是否被授权。如果未经授权,则重定向到登录页面。你必须为此编写一个方法。在 ASP.NET MVC 中,如果您在方法(操作)中使用 [Authorize] 属性,那么这将防止未经授权的访问。
        猜你喜欢
        • 2015-08-14
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        相关资源
        最近更新 更多