mvc路由原理 php_php – 你如何在MVC中构建和路由模块?

我正在构建一个MVC,其中一切都是模块.这将允许我分离对象集合,如论坛和用户模块,以进一步组织我的MVC.

/blog

/controller

/model

/view

/user

/controller

/model

/view

/forum

/controller

/model

/view

我目前将诸如forum / edit / 34之类的路由映射到/forum/controller/edit.php,其中包含Forum_Controller_Edit类. (这与标准方法略有不同,其中所有操作都是控制器Forum_Controller :: edit()的方法).这允许我将控制器的所有单个“动作”分离到它们自己的文件中,因此我不必管理具有10个不同动作的大型控制器.

无论如何,这是问题所在.假设我想将新控制器添加到模块中.例如,假设我想要论坛主题(论坛/主题/视图/ 34).我可以创建一个新的“主题”模块.

/forum

/controller

/model

/view

/topic

/controller

/model

/view

但是然后1)我将不得不使用像/ topic / view /而不是forum / topic / view的URL,2)我会分离相关的组件(主题应该是论坛模块的一部分),以及3)我现在会如果我愿意,无法为内容节点等内容创建一般的“主题”模块.

那么如何在每个模块中允许多个控制器(具有多个动作)的同时构建模块化MVC?

Kohana Framework决定实施HMVC来解决这个问题.但是,这会导致许多is_file()检查以查找要加载的文件的正确位置. I / O检查在商品硬件上非常珍贵,所以我不认为这是一个选项.此外,在使用具有相同名称的多个类时,不明显加载哪个类的版本会导致混淆.

我想找到一个解决这个问题的方法,它不涉及预先设置路径或检查正确类的文件夹.然而,在我看过的最后20个框架中,他们似乎没有对这个普遍问题有一个好的答案.有人有想法吗?

路由更新

如果我要实现路由,它将如何工作?我将如何处理第一个(/论坛),第二个(/论坛/视图)和第三个级别(/ forum / topic / view)?我的路线如何通过参数知道第三级路线和第二级路线之间的区别?换句话说,我的系统会尝试做哪些这些? (鉴于URI“forum / topic / view / 34”)

$controller = new \Forum\Controller\Topic\View;

$controller->action('34');

// or

$controller = new \Forum\Controller\Topic;

$controller->view('34');

// or

$controller = new \Forum\Controller;

$controller->topic('view', '34')

路由更新2

考虑到Kyles advice我决定所有控制器都需要一个路由集,这将允许我定义URL路径“forum / topic / view / 34”上面的哪些类路由.毕竟,每个URL都很重要,不应该基于您拥有的文件系统结构.我相信他说的是URL设计比我们经常提供的更值得关注.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值