2011-04-08 55 views
2

我看到许多网站的MVC实现有一个单一入口点,如index.php文件,然后解析URL以确定要运行哪个控制器。这对我来说似乎很奇怪,因为它涉及到必须使用Apache重写来重写URL,并且有足够的页面使单个文件变得臃肿。为什么应该为网站MVC需要单点输入?

为什么不相反只是让单个页面成为控制器?我的意思是,如果您的网站上有一个列出所有注册会员的页面,那么页面导航的members.php将成为会员的控制器。这个php文件将查询成员模型中的数据库成员列表,并将其传递给成员视图。

我可能会错过一些东西,因为我最近才发现MVC,但这个问题一直在困扰着我。这种设计不是最好的,因为它没有一个臃肿的入口文件,所有的页面都不直观地调用模型,并且包含,封装并从各自的页面调用特定页面的视图?

+3

你是什么意思*臃肿*?可能做错了什么...... – 2011-04-08 14:26:26

+0

它背后的理念是你有例如100条有100个唯一永久链接的文章,所有这些都是通过单一控制器动作显示的,只有一条路径。从根本上说,你可能拥有尽可能多的路线(通常与控制器操作一样多),并且我没有看到任何缺点。那么你将只有一个.htaccess路由通向index.php,然后你应用你的路由配置和检查。如果我只是一味地解释这个问题,不是很确定,但是经过一番努力之后,你就会明白这些利益主体。 – 2011-04-08 14:30:07

+0

您可以使用除重写纸之外的其他方式实现虚拟资源。特别是你可以使用php脚本sans文件扩展名,并使用PATH_INFO,因为它在前端控制器之前完成。这种方法与MVP btw更隐约相关。 – mario 2011-04-08 14:31:30

回答

6

从我的经验,具有单入口点有几个臭名昭著的优点:

它简化集中的任务,如资源加载(连接到数据库或一个内存缓存服务器,日志执行时间,会话处理等)。如果你想添加或删除一个集中式任务,你只需要改变一个单独的文件,这是index.php。

在PHP中解析URL会使“虚拟URL”与Web服务器上的物理文件布局解耦。这意味着您可以轻松更改您的URL系统(例如,用于SEO目的或站点国际化),而无需实际更改服务器中脚本的位置。

但是,有时有一个单入口点可能会浪费服务器资源。这显然适用于静态内容,但是当您有一组具有特定目的的请求时,只需要一小部分的resorces(也许它们不需要DB访问)。那么你应该考虑有多个入口点。我为我正在工作的网站做了这些工作。它具有所有“标准”动态内容的入口点,另一个用于调用公共API的入口点,这需要更少的资源并且具有完全不同的URL系统。

而且最后要注意的:如果该网站是很好实现的,您的index.php没有成为必然臃肿:)

+0

喜欢这个答案。谢谢!有很大的意义=) – 2011-04-08 14:56:22

1

当使用MVC框架时直接deeplinking到控制器它消除的可能性根据您使用的框架实施控制器插件或过滤器。在访问控制器之前,拥有单一入口点将标准化应用程序和模块的引导程序,并执行前面提到的插件。

此外,Zend Framework使用自己的URL重写形式的路由。在使用Zend Framework的应用程序中,我工作的是可能有6行重写条件和条件的.htaccess文件。

0

单一入口点固然有其优点,但你可以在一个处理数据库连接,会话等,这是不臃肿,它符合每一个页面的顶部得到相当多从中央要求的文件相同的利益干燥的原则(除了那个需要一行),它分离逻辑和演示文稿,如果你改变文件位置,一个简单的搜索和替换将修复它。

我已经使用了两个,我不能说我的目的是更好或更糟。

相关问题