什么是MVC/HMVC/PAC模式中URL结构的约定?

The*_*can 5 php model-view-controller design-patterns pac hmvc

在MVC它就像http://www.yourdomain.com/sampleController/sampleAction/如果你打电话只是/sampleController/那么/sampleController/indexAction/,如果你只需要调用/然后/indexController/indexAction/火灾.

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

Zend有一些smilir.他们称之为模块.

它们基本上只是包含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
Run Code Online (Sandbox Code Playgroud)

我现在调用URL /content/toplist/.

对于URL,/users/chat/room/?room=1该示例使其显而易见,因为只有一种可能性.但这是正确的吗?是否存在在右侧控制器中唯一地添加正确操作的约定?

我的第一个想法是"尽量少猜".

所以我首先检查网址是否与某个动作直接匹配.

如果存在一个带有索引动作的控制器/模块,如果存在"更高级别"的匹配,则无法触发.

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

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

但我想避免这个if/else的东西和文件系统访问.所以我想知道会议是怎么回事.或者甚至有一个?我找不到任何例子!

或者做一些像调用IndexAction,如果没有指定只是没有完成,但每个"短网址"必须在单独的路由逻辑中指定?

或者我完全误解了HMVC/PAC的概念?

仅供参考:我包含了php标签,因为我在php中使用我的框架,想知道php中的约定.我经常看到其他编程语言的差异.

Gor*_*don 1

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

URI 标识资源。某些框架如何将这些 URI 映射到内部应用程序功能取决于该框架。例如,如果您想做 REST,则根本不需要操作,因为操作是由使用的 HTTP 动词隐含的,例如

DELETE http://example.com/resourceName/1234
Run Code Online (Sandbox Code Playgroud)

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

POST http://example.com/resourceName/delete (with POST Body 1234)
Run Code Online (Sandbox Code Playgroud)

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