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

spi*_*non 13 php design-patterns

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

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

我曾尝试在谷歌搜索"带有php的单索引页面"等类似的搜索,但我找不到任何好的文章解释为什么使用这种方法.我真的想把这些旧东西踢到路边,而不是沿着那条路走下去,但我想在提出建议之前先做一些合理的推理.

kij*_*jin 17

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

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

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

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