【问题标题】:Whats the convention on URL-structure in MVC/HMVC/PAC pattern?MVC/HMVC/PAC 模式中 URL 结构的约定是什么?
【发布时间】:2011-06-26 01:32:53
【问题描述】:

在 MVC 中,它类似于 http://www.yourdomain.com/sampleController/sampleAction/,如果你只调用 /sampleController/,那么 /sampleController/indexAction/,如果你只调用 /,那么 /indexController/indexAction/ 就会触发。

当然也有例外,但这或多或少是惯例。

Zend 有一些微笑。他们称之为模块。

它们基本上只是每个包含 MVC 逻辑的文件夹。所以你可以拨打/Module1/Controller/Action/。如果你只是打电话给/Module1/,那么/Module1/indexController/indexAction/ 就会触发。如果你有一个庞大的项目,这很方便,因为你可以构建更多,但如果你只有一个小项目,那就很烦人了。

所以我非常喜欢 HMVC/PAC 的理念,并希望在我的框架中采用它。

我是否理解正确,它与 Zend 基本相同,但具有无限的嵌套模块?

例如我有/sub-project/sub-sub-project/controller/action/

如果我调用 /A/B/C/D/,约定是什么。

这是否意味着模块 A/B 中控制器 C 中的动作 D? 还是模块 A/B/C 中控制器 D 中的 IndexAction?

举个例子:

Content
    ToplistController 
        AdministrateAction
        IndexAction
ContentController
     ToplistAction
Users
    Chat
        RoomController
            IndexAction

我现在调用 URL /content/toplist/

对于 URL /users/chat/room/?room=1,这个例子很明显,因为只有一种可能性。但它是正确的吗?是否有约定在正确的控制器中唯一地处理正确的操作?

我的第一个想法是“尽可能少地猜测”。

所以我首先检查 url 是否与操作直接匹配。

如果有一个控制器/模块与索引操作调用相同,如果存在“更高级别”的匹配项,它就无法触发。

如果不是这种情况,我会查看 url 是否直接匹配控制器并附加 IndexAction。

如果不是这样,我会寻找一个模块并猜测 IndexController 和 IndexAction,如果不是这样,我会寻找一个名为 index 的模块。

但我想避免这种 if/else 东西和文件系统访问。所以我想知道公约是如何的。或者甚至有一个?我找不到任何例子!

或者如果没有指定只是没有完成但必须在单独的路由逻辑中指定每个“短 url”,则执行类似调用 IndexAction 的操作?

还是我完全误解了 HMVC/PAC 的概念?

仅供参考:我包含了 php 标记,因为我在 php 中做我的框架并且想了解 php 中的约定。我经常看到其他编程语言的差异。

【问题讨论】:

  • 我希望我说清楚了。用英语解释这些抽象的东西对我来说并不容易。如果有任何不清楚的地方,请询问,以便我改进问题。
  • +1 有兴趣提出问题而不仅仅是发帖

标签: php model-view-controller design-patterns hmvc pac


【解决方案1】:

没有官方的独立于框架的约定。

URIs identify resources。某些框架如何将这些 URI 映射到内部应用程序功能取决于框架。例如,如果你想做 REST,你根本不会有任何动作,因为actions are implied by the used HTTP verbs,例如

DELETE http://example.com/resourceName/1234

而“路由”框架中的相同可能类似于

POST http://example.com/resourceName/delete (with POST Body 1234)

两个 URI 都以某种方式映射到应用程序中知道如何删除的机制。

【讨论】:

    【解决方案2】:

    一个简单的(并且被广泛接受,我相信)约定是尾部斜线的存在/不存在,其中 A/B/C/D/ 表示控制器 D 中的 IndexAction,而 A/B/C/D 表示操作 D在控制器 C 中。

    【讨论】:

    • 哦,我完全不知道这个约定!
    猜你喜欢
    • 2011-01-16
    • 2013-07-04
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多