我正在寻找一个(小型)库来帮助我干净地实现 front controller对于我的pet project并将请求分派(dispatch)给单个 Controller 类。前端 Controller /调度程序和 Controller 类需要完全可单元测试,而无需发送 HTTP 请求。
要求
- PSR-0兼容
- 可通过其自己安装PEAR channel
- 支持单元测试:
- 检查是否发送了正确的 HTTP header
- 捕获输出以允许在单元测试中进行检查
- 最好是 PHPUnit 辅助方法来帮助检查输出(针对不同的输出类型,即 HTML、XML、JSON)
- 允许设置传入的 HTTP header 、GET 和 POST 参数以及 Cookie,而无需实际执行 HTTP 请求
- 需要独立使用 - 没有数据库抽象、模板等,以便胖框架都提供
背景
SemanticScuttle 是一个现有的、正在运行的应用程序,它必然会获得适当的“C”支持。库需要融入其中,并且需要与现有的结构和类一起工作。我不会重写它来匹配框架的特定所需目录布局。
应用程序已经有单元测试,但基于 HTTP 请求,这使得它们很慢。此外,当前在 www
目录中包含数十个 .php
文件的旧方法并不是最易于管理的解决方案,这就是为什么需要引入适当的 Controller 类。总共大约有20-30个 Controller 。
以前的经验
总的来说,我对 Zend Framework 之前的一些项目非常满意,但它有几个缺点:
- 不可进行 pear 安装,因此我无法将其用作可安装 pear 的应用程序中的依赖项
- 仅作为一个胖下载提供,因此我需要手动从中提取所需的位 - 对于每个 ZF 更新。
- 虽然 ZF Controller 提供单元测试支持,但缺乏一些高级实用功能,例如 json 断言、HTTP 状态代码和内容类型检查。
虽然这些观点看起来很挑剔,但它们对我来说很重要。如果我必须自己实现它们,我不需要使用外部库,而是编写自己的库。
我不想要什么
StackOverflow 有一百万个“什么是最好的 PHP 框架”问题( 1 、 2 、 3 、 4 、 5 ),但我不是在寻找这些问题,而是在寻找 特定有助于 Controller 的库。如果它是模块化框架的一部分,那就好。
我也知道PHP framework comparison website ,但这无助于回答我的问题,因为那里没有列出我的要求。
而且我知道我可以自己构建这一切并发明另一个微框架。但为什么?已经有很多了,只要拥有我需要的一切即可。
相关问题
最佳答案
非常了解 Symfony2,我可以向您保证,绝对可以将它仅用于 MVC 中的“C”。模型和模板是完全免费的,并且通常都是从 Controller 执行的,所以如果您不专门调用 Doctrine 或 Twig,您可以做您想做的事情。
至于功能测试,这实际上是您在文章中讨论的内容,您想要查看的是 WebTestCase 类,the LiipFunctionalTestBundle bundle 很好地补充了它。对于更高级的案例。
这允许一些事情,比如 testing a contact form that sends an email 的例子,整个 HTTP 请求都是在进程中完成的,因为框架的编写允许每个进程多个请求并且没有全局状态,所以这种方法工作得很好,不需要运行 http 服务器或任何东西。正如您所看到的,我也对响应的 HTTP 状态代码进行了断言,并且能够捕获电子邮件而不发送它,因为在测试配置 sending of emails is disabled 中在 Symfony2 的标准发行版中。
话虽这么说,您也可以使用 Symfony2 的 HttpFoundation 中的 Request 和 Response 类。成分。它应该允许您测试您的代码,但在我看来,如果您使用整个框架,您将无法获得尽可能多的优秀功能。当然这只是我的偏见;)
关于支持单元测试的 PHP 前端 Controller 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6274992/