有一个PHP前端加载器或使用.htaccess加载控制器更好吗?

时间:2012-04-28 03:42:58

标签: php .htaccess mod-rewrite url-routing

我看到了这篇文章How to implement a front controller。文章建议加载控制器的更好方法是将其保留为apache,因为这是它的设计目的。

所以我有几个问题......

  1. 使用.htaccess是否可以替代使用php将请求路由到控制器?
  2. 哪种方式更好,更快,更模块化,更便携?
  3. 有没有人以这种方式实际实现了mvc框架? 如果有的话,有任何提示吗?
  4. 有没有人知道任何讨论这种技术的网站(我找不到任何内容 谷歌)?

2 个答案:

答案 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。当然我认为这是真的,但是当有任何强大,灵活,大型的系统需要一点点学习。

关于你的问题:

  1. .htaccess可能是使用PHP的一种可行的替代方案,但是它的可扩展性要低得多,而且变得复杂且难以快速管理。您可以在Apache,lighttpd,nginx中进行这样的URL配置,并且我偶尔也会看到它,但是对于一些人来说这样做会是一个很大的学习曲线。

    如果使用PHP进行路由,它可以从配置文件,数组中获取路由信息,甚至可以通过对象注入。这为您提供了很大的灵活性,并且可以根据许多因素包含或排除路线。

  2. 使用服务器配置文件配置URL路由可能会稍快一些,但差别很小。服务器配置的模块化程度要低得多,而且不能跨不同的HTTP服务器移植。本机语言前端控制器可在任何服务器平台上运行。

  3. 我没有看到过这样做的MVC框架,但是我没有在PHP之外调查过很多。

  4. 也无法帮助解决这个问题。

  5. 就个人而言,在PHP中我经常使用Zend Framework。它使用前端控制器模式,通过一个脚本路由所有内容。我对这种方法没有任何限制,它提供的东西超出了我的需要。

    这些是我的想法,希望它有所帮助。