Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
为什么对整个站点使用单个index.php页面?_Php_Design Patterns - Fatal编程技术网

为什么对整个站点使用单个index.php页面?

为什么对整个站点使用单个index.php页面?,php,design-patterns,Php,Design Patterns,我正在接管一个现有的PHP项目。我注意到之前的开发人员对整个站点使用了一个index.php页面,目前有10多个页面。这是我看到的第二个这样做的项目。我不认为这种方法有什么好处。事实上,这似乎使一切都变得过于复杂,因为现在你不能只向网站添加一个新页面并链接到它。您还必须确保使用if子句更新主索引页,以检查该页类型,然后加载该页。看起来,如果他们只是试图重用模板,那么只对页眉和页脚使用includes,然后使用引用的文件创建每个新页面会更容易 有人能解释为什么会使用这种方法吗?这是我不熟悉的某种形

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

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


我曾尝试在谷歌上搜索“使用php的单索引页面”之类的东西,但我找不到任何好文章解释为什么使用这种方法。我真的很想把这些旧东西踢到路边,而不是继续沿着这条路走下去,但我想在提出建议之前有一些合理的理由

当页面的内容由数据库内容决定时,通常使用这种方法。因此,所有的工作都将在一个文件中完成。这在CMS系统中很常见。

好吧,如果唯一改变的是URL,那么除了美观之外,它似乎不是出于任何原因而改变的…

对我来说,单一入口点可以帮助你更好地控制你的应用程序:它有助于轻松处理错误、路由请求、调试应用程序。

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


在现代web框架中,这可能使用前端控制器,但由于许多PHP代码/开发人员患有NIH综合症,因此无法判断。在公共目录中有一个index.PHP文件也可以防止PHP解释器出现故障。许多框架使用index.PHP文件包含文档根目录之外的引导文件。如果发生这种情况,用户将能够看到此单个文件的源代码,而不是整个代码库。

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

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

前端控制器还可以让你在网站上很容易地拥有漂亮的URL,因为你完全可以自由地使用任何你喜欢的URL,并将其发送给任何你需要的控制器/方法。否则,你会被每个URL都以
.php
结尾,后面是一个丑陋的查询字符串列表所困扰,而避免这种情况的唯一方法是要在.htaccess文件中使用更难看的重写规则,即使是WordPress,它有几十个不同的入口点(特别是在管理部分),也会强制大多数常见的请求通过index.php,这样就可以使用灵活的permalink格式


其他语言中的几乎所有web框架都使用单入口点——或者更准确地说,调用一个脚本来引导一个进程,然后与web服务器通信。Django就是这样工作的。CherryPy就是这样工作的。在Python中这样做是很自然的。唯一广泛使用的允许web应用程序o以任何其他方式编写(用作旧式CGI脚本时除外)是PHP。在PHP中,你可以给任何文件一个
.PHP
扩展名,它将由web服务器执行。这是非常强大的,它使PHP易于学习。但是一旦你超过了一定的复杂程度,单点输入法开始看起来更吸引人。

类似于@zerkms,感谢类似于a的一点rticle。我最难找到我想要的东西。我会看看。“php前端控制器”可能会带来更多的结果。Seo友好链接是我的主要原因opinion@Col是的,我可以理解。不过我使用的实现只有原始URL,所以每个页面都是index.php?Module=¶ms=etc…所以这对我来说没有意义。但是如果你把它隐藏在漂亮的URL后面,那当然。是的,我可以看到。但是这些都有单独的内容页,在索引页中加载了if子句。只是看不到一个页面重定向所有请求的价值。我的意思是,它重用了一个模板,但这很容易做到带有一个include。我不太明白。每个页面都会发生变化,因为每个页面都有一个正在创建的php页面。它只是被加载到索引页面中,所以URL保持不变,只是参数发生了变化。这意味着“美观”“
mysite.com/?page=about
vs
mysite.com/about.php
为什么通过单个文件路由请求?Web服务器已经将请求路由到各个页面。错误通常由包含内容的各个php页面处理。只是没有真正看到这里的巨大价值。@spin