我看到了这篇文章How to implement a front controller。文章建议加载控制器的更好方法是将其保留为apache,因为这是它的设计目的。
所以我有几个问题......
答案 0 :(得分:4)
该文章中使用单一入口点的主要反对意见似乎是:
...当你拥有数百个页面控制器时呢?你结束了 一个巨大的开关声明或者可能是阵列中伪装的东西, XML文档或其他什么。对于每个页面请求,PHP都必须这样做 重新加载一堆与当前请求无关的数据 用户正在尝试执行。
这是一个非常微弱的论点。首先,这是实现路由机制的一种可怕方式。其次,应用程序必须相当复杂才能产生任何可测量的效果 - 如果应用程序很复杂,那么与应用程序其余部分的执行相比,入口点的任何性能损失都很小。 / p>
并考虑:如果用于处理复杂Web应用程序前端的PHP脚本难以维护,请想象等效的.htaccess
文件的外观!
最后,您可以避免使用bytecode cache的问题,从而为每个请求加载脚本带来“问题”。
答案 1 :(得分:2)
也许它是啤酒,但那篇文章对我来说没什么意义,它也在引号中加了很多“单词”。我不同意那里提到的一些事情。确实说...that this approach to implementing a Front Controller in PHP does alot (sic) to raise the learning curve required to become fluent with the framework
。当然我认为这是真的,但是当有任何强大,灵活,大型的系统不需要一点点学习。
关于你的问题:
.htaccess
可能是使用PHP的一种可行的替代方案,但是它的可扩展性要低得多,而且变得复杂且难以快速管理。您可以在Apache,lighttpd,nginx中进行这样的URL配置,并且我偶尔也会看到它,但是对于一些人来说这样做会是一个很大的学习曲线。
如果使用PHP进行路由,它可以从配置文件,数组中获取路由信息,甚至可以通过对象注入。这为您提供了很大的灵活性,并且可以根据许多因素包含或排除路线。
使用服务器配置文件配置URL路由可能会稍快一些,但差别很小。服务器配置的模块化程度要低得多,而且不能跨不同的HTTP服务器移植。本机语言前端控制器可在任何服务器平台上运行。
我没有看到过这样做的MVC框架,但是我没有在PHP之外调查过很多。
也无法帮助解决这个问题。
就个人而言,在PHP中我经常使用Zend Framework。它使用前端控制器模式,通过一个脚本路由所有内容。我对这种方法没有任何限制,它提供的东西超出了我的需要。
这些是我的想法,希望它有所帮助。