Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC/HMVC/PAC模式中URL结构的约定是什么?_Php_Model View Controller_Design Patterns_Hmvc_Pac - Fatal编程技术网

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

Php MVC/HMVC/PAC模式中URL结构的约定是什么?,php,model-view-controller,design-patterns,hmvc,pac,Php,Model View Controller,Design Patterns,Hmvc,Pac,在MVC中,它类似于http://www.yourdomain.com/sampleController/sampleAction/如果只调用/sampleController/,那么/sampleController/indexAction/如果只调用/code>/indexController/indexAction/就会触发 当然也有例外,但这或多或少是惯例 Zend有些笑料。他们称之为模块 它们基本上只是包含MVC逻辑的文件夹。因此,您可以调用/Module1/Controller/Ac

在MVC中,它类似于
http://www.yourdomain.com/sampleController/sampleAction/
如果只调用
/sampleController/
,那么
/sampleController/indexAction/
如果只调用/code>/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中的索引

让我们举一个例子:

Content
    ToplistController 
        AdministrateAction
        IndexAction
ContentController
     ToplistAction
Users
    Chat
        RoomController
            IndexAction
我现在调用URL
/content/toplist/

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

我的第一个想法是“尽量少猜”

因此,我首先检查url是否与某个操作直接匹配

如果有一个控制器/模块使用索引操作调用相同的控制器/模块,那么如果存在“更高级别”的匹配,它就无法启动

如果不是这样,我将看到url是否直接匹配控制器和追加索引

如果情况并非如此,我将查找一个模块,并猜测IndexController和IndexAction,如果情况并非如此,我将查找名为index的模块

但我希望避免使用if/else之类的东西,避免文件系统访问。所以我想知道这个惯例是怎样的。或者甚至有一个?我找不到任何例子

或者,如果未指定任何内容,则调用IndexAction,但每个“短url”都必须在单独的路由逻辑中指定,这是不是很简单

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


仅供参考:我之所以包含php标签,是因为我正在用php编写框架,并希望了解php中的约定。我经常看到其他编程语言之间的差异。

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

。某些框架如何将这些URI映射到内部应用程序功能取决于该框架。例如,如果你想休息,你根本就没有行动,因为,例如

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

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

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

一个简单的(我相信也是广泛接受的)约定是存在/不存在尾随斜杠,其中a/B/C/D/将意味着控制器D中的索引,a/B/C/D将意味着控制器C中的操作D。

我希望我说清楚。用英语解释这些抽象的东西对我来说并不容易。如果有什么不清楚的地方,请询问,这样我就可以完善评估。+1有兴趣问问题,不仅仅是在波斯廷,我完全不知道这个惯例!
POST http://example.com/resourceName/delete (with POST Body 1234)