为什么要为整个网站使用单个index.php页面?

时间:2010-11-03 04:15:29

标签: php design-patterns

我正在接管一个现有的PHP项目。我注意到以前的开发人员为整个网站使用了一个index.php页面,目前有10多页。这是我见过的第二个项目。我没有看到这种方法的优势。事实上,似乎它使一切变得复杂,因为现在你不能只是向网站添加新页面并链接到它。您还必须确保使用if子句更新主索引页以检查该页类型,然后加载页面。看起来如果他们只是尝试重用模板,那么只需使用包含页眉和页脚,然后使用引用的那些文件创建每个新页面就更容易了。

有人可以解释为什么会使用这种方法吗?这是我不熟悉的某种形式的MVC模式吗? PHP是第二语言,所以我不熟悉最佳实践。

我曾尝试在Google上搜索“带有php的单个索引页面”以及类似的内容,但我找不到任何好文章解释为何使用此方法。我真的想把这些旧东西踢到路边,而不是沿着那条路走下去,但我想在提出建议之前先做一些合理的推理。

6 个答案:

答案 0 :(得分:17)

前端控制器(index.php)可确保始终正确处理整个站点通用的所有内容(例如,身份验证),无论您请求哪个页面。如果你有50个不同的PHP文件分散在各处,那么很难管理它。如果您决定更改公共库文件的加载顺序,该怎么办?如果您只有一个文件,则可以在一个位置进行更改。如果您有50个不同的入口点,则需要更改所有入口点。

有人可能会说,一直加载所有常见的东西都是浪费资源,你应该只加载这个特定页面所需的文件。真正。但今天的PHP框架大量使用OOP和自动加载,因此这种“浪费”不再存在。

前端控制器还使您可以轻松地在您的站点中拥有漂亮的URL,因为您可以完全自由地使用您想要的任何URL并将其发送到您需要的任何控制器/方法。否则,你会遇到以.php结尾的每个URL,后面跟着一个丑陋的查询字符串列表,唯一的办法就是在你的.htaccess文件中使用更加丑陋的重写规则。即使是WordPress,它有许多不同的入口点(特别是在管理部分),强制最常见的请求通过index.php,这样你就可以拥有灵活的永久链接格式。

其他语言中的几乎所有Web框架都使用单一入口点 - 或者更准确地说,调用单个脚本来引导进程,然后该进程与Web服务器进行通信。 Django就是这样的。 CherryPy就是这样的。在Python中以这种方式执行它是很自然的。允许以任何其他方式编写Web应用程序的唯一广泛使用的语言(除非用作旧式CGI脚本)是PHP。在PHP中,您可以为任何文件提供.php扩展名,它将由Web服务器执行。这非常强大,它使PHP易于学习。但是,一旦你超过一定程度的复杂性,单点入门方法开始变得更具吸引力。

答案 1 :(得分:1)

在公共目录中有一个index.php文件也可以防止php解释器发生故障。许多框架使用index.php文件在doc root之外包含bootstrap文件。如果发生这种情况,用户将能够看到此单个文件的源代码而不是整个代码库。

答案 2 :(得分:0)

嗯,如果唯一改变的是URL,那么除了美学目的之外,它似乎不会出于任何原因......

答案 3 :(得分:0)

就我而言 - 单一入口点可以帮助您更好地控制您的应用程序:它有助于轻松处理错误,路由请求,调试应用程序。

答案 4 :(得分:0)

单个“index.php”是一种简单的方法,可以确保对您的应用程序的所有请求都通过同一个门。这样,当您添加第二页时,您不必确保自动配置引导,身份验证,授权,日志记录等 - 您可以通过框架的优点免费获得它。

在现代Web框架中,这可能是使用前端控制器,但由于许多PHP代码/开发人员患有NIH综合症,因此无法分辨。

答案 5 :(得分:-1)

通常,当页面内容由数据库内容确定时,使用这些方法。因此,所有工作都将在一个文件中完成。这在CMS系统中经常出现。