5

在 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 中的约定。我经常看到其他编程语言的差异。

4

2 回答 2

2

一个简单(并且被广泛接受,我相信)的约定是尾部斜杠的存在/不存在,其中 A/B/C/D/ 意味着控制器 D 中的 IndexAction 和 A/B/C/D 意味着控制器 C 中的动作 D .

于 2012-03-11T07:56:58.770 回答
1

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

URI 标识资源。某些框架如何将这些 URI 映射到内部应用程序功能取决于框架。例如,如果你想做 REST,你根本不会有动作,因为动作是由使用的 HTTP 动词暗示的,例如

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

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

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

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

于 2011-02-12T12:16:16.013 回答