PHP前端控制器库,支持单元测试 - php

我正在寻找一个(小型)库,该库可以帮助我为front controller干净地实现pet project并将请求分派到单个控制器类。前端控制器/调度程序和控制器类需要完全可单元测试,而不发送HTTP请求。

要求

PSR-0兼容
可通过自己的PEAR channel安装
支持单元测试:

检查是否发送了正确的HTTP标头
捕获输出以允许在单元测试中进行检查
PHPUnit辅助方法可帮助检查输出(对于不同的输出类型,即HTML,XML,JSON)
允许设置传入的HTTP标头,GET和POST参数以及cookie,而无需实际执行HTTP请求

需要可以独立使用-无需db抽象,模板化,以便胖框架都可以提供

背景

SemanticScuttle是必须获得适当的“ C”支持的应用程序,它是一个现有的可运行应用程序。该库需要融入其中,并且需要使用现有的结构和类。我不会重写它以匹配框架的特定必需目录布局。

该应用程序已经具有单元测试,但是基于HTTP请求,这会使它们变慢。另外,当前在.php目录中具有数十个www文件的旧方法也不是最易于管理的解决方案,这就是为什么需要引入适当的控制器类的原因。总而言之,将有大约20-30个控制器。

以往的经验

总的来说,对于以前的一些项目,我对Zend Framework感到非常满意,但是它有几个缺点:

无法安装在pear上,因此我无法在pear可安装的应用程序中将其用作依赖项
仅作为一次胖下载提供,因此我需要手动从中提取所需的位-对于每个ZF更新。
尽管对ZF控制器存在单元测试支持,但它缺少一些高级实用程序功能,例如json的断言,HTTP状态代码和内容类型检查。

这些观点似乎有些挑剔,但对我来说很重要。如果必须自己实现它们,则无需使用外部库,而可以编写自己的库。

我不想要的

StackOverflow有上百万个“什么是最好的PHP框架”问题(1,2,3,4,5),但是我不是在寻找那些,而是在寻找一个有助于解决问题的特定库控制器。如果它是模块化框架的一部分,那就好。

我也知道PHP framework comparison website,但是因为我的要求未在此处列出,所以它无助于回答我的问题。

而且我知道我可以自己构建所有这些,并发明另一个微框架。但为什么?他们已经有很多了,而其中一个必须拥有我所需要的全部。

相关问题

What's your 'no framework' PHP framework?
How do you convert a page-based PHP application to MVC?

参考方案

我非常了解Symfony2,可以向您保证,可以将其仅用于MVC中的“ C”。这些模型和模板是完全免费的,并且通常无论如何都可以从Controller中执行,因此,如果您不专门调用Doctrine或Twig,则可以执行所需的操作。

至于功能测试,这实际上是您在文章中所讨论的,您要查看的是WebTestCase类,对于更高级的案例,它由the LiipFunctionalTestBundle bundle进行了很好的补充。

这允许像testing a contact form that sends an email的示例这样的事情,其中​​整个HTTP请求都在进程中完成,因为该框架被编写为允许每个进程多个请求且没有全局状态,所以它工作得很好并且不需要http服务器正在运行或任何东西。如您所见,我也对响应的HTTP状态代码进行断言,并且由于在Symfony2的标准发行版中的测试配置sending of emails is disabled中能够捕获电子邮件而没有发送电子邮件。

话虽如此,您也可以只使用Symfony2的HttpFoundation组件中的Request和Response类。它应该允许您测试代码,但是如果使用整个框架,IMO将不会获得尽可能多的出色功能。当然,那只是我的偏见;)

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…