【问题标题】:Which PHP frameworks do NOT use a front controller? [closed]哪些 PHP 框架不使用前端控制器? [关闭]
【发布时间】:2011-10-20 14:48:58
【问题描述】:

似乎更流行的框架使用前端控制器。我了解前端控制器的好处(减少冗余并简化可扩展性),但是

我想知道哪些 PHP 框架不使用前端控制器。此外,我对那些使用页面控制器并建议对 url 使用真实文件目录结构的框架感兴趣,而不是重写几乎每个 url 或使用混乱的查询字符串。此外,我有兴趣了解哪些不使用前端控制器的框架实现了 MVC。最后,您可以在非前端控制器框架上提供的任何其他详细信息都会很有用,尤其是它使用或需要的 PHP 版本。 (我知道我以后可以从其他网站获得这些信息,所以它不那么重要。)

考虑the words of Rasmus Lerdorf(PHP的原始创建者):

“至于MVC,如果你用心使用它,它可以在web中派上用场 应用。只要确保你避免创建一个 单片控制器。 Web 应用程序本质上是 一系列小的离散请求。如果您发送所有请求 通过您刚刚击败的单台机器上的单个控制器 这个非常重要的架构。离散性为您提供可扩展性 和模块化。你可以将大问题分解成一系列非常 小型模块化解决方案,您可以将它们部署到尽可能多的 随心所欲的服务器。您最需要在某种程度上将它们联系在一起 可能通过一些后端数据存储,但将它们与 可能的。这意味着您希望您的视图和控制器非常接近 彼此之间,并且您希望控制器尽可能小。” - Rasmus Lerdorf

更新:非常感谢用户 Alex 第一个希望有更多的答案。他的答案是 QCubed ..

"记住前端控制器(index.php)和MVC是分开的 模式。也就是说,你可以有一个 MVC 框架,它不 实现或要求前端控制器。我选择的框架, QCubed,恰好是这样的。” - Alex

现在,如果我们可以重新提出这个问题,那么我们可以继续我们开始的工作,并汇总一个不使用前端控制器的框架列表。请投票重新开放。谢谢。

【问题讨论】:

  • 我想我可以肯定地说没有不使用 C 的 MVC 框架
  • @SyntaxError Django 使用 MTV(模型-模板-视图)没有控制器。好吧,他们将视图用作控制器 =S .. 我喜欢 php
  • @Syntax Error 当然,任何 MVC 框架都会使用控制器。我对不使用 FRONT 控制器的框架感兴趣(请注意,我对使用页面控制器代替前端控制器的框架特别感兴趣)。
  • 我觉得没有前端控制器很难实现控制反转,控制反转是框架的主要特征,不是吗?这意味着没有前端控制器的 MVC 框架并不是真正的框架,而是一个库。
  • 我曾经想过同样的问题,希望看到一些答案

标签: php


【解决方案1】:

我还在学习 Symfony2,所以如果我没记错的话,我认为你可以有不同的前端控制器。并且代码会被分开在不同的Bundles中。

默认情况下,它有两个前端控制器,一个用于生产,另一个用于开发。但是我认为您可以创建多个(每个页面一个)

希望对你有帮助

【讨论】:

  • 正如你所说的 Symfony2,至少使用一个前端控制器。问题是关于使用 no 前端控制器的 MVC 框架。 -1
  • 但是如果你创建与页面一样多的前端控制器,那就像使用页面控制器一样......你会有像 mysite.com/home.php、mysite.com/products.php 这样的页面, mysite.com/contact.php ..它们都是使用不同边界的不同文件(控制器)......我认为这就是你要找的
  • @pleasedontbelong 感谢您的回答。事实上,页面控制器基本上就像多个前端控制器。但我不相信 Symfony2 建议为网站制作新的页面控制器。
  • 也许你可以,但这会扭曲 sf2 并且真的不是 Symfony2 前端控制器的目的。 OP 正在寻找一个通常像您在评论中描述的那样工作的框架。
【解决方案2】:

有趣的问题,虽然我不确定你的最终游戏是什么。控制器基本上将框架“引导”到可用状态。我的经验在于 Symfony、Zend 和 CakePHP,并且可以告诉您 Symfony 中使用的控制器非常短(大约 50 行代码)。然而,底层代码相当广泛,但这段代码做了很多事情,比如设置你的 ORM,缓存大量使用的数组(在 /cache 目录中创建静态文件),以及为文件调用初始化一个自动加载器,仅举几例。

在 Symfony 框架上下文中,您有一个主控制器,但您也有迷你控制器,或者如您所说的页面控制器,这些控制器被称为“动作”。动作充当用户请求和应用程序的各种属性之间的桥梁,其中可能包括文件/数据存储、请求处理、用户重定向等。与主控制器一样,动作是轻量级的,主要由 API 调用组成底层类和函数。

我实际上在 Symfony 中使用 Zend 来填补 Symfony 不提供的功能空白。所以对于你的问题,我使用 Zend 功能没有任何控制器交互。我需要做的就是在自动加载器中初始化 Zend(b/c Zend 已正确命名空间)。也使用 CakePHP 来利用 Inflector 类,不使用控制器,只是调用我不想自己编写的功能。

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2019-03-17
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多