我需要以多种不同的文件格式创建任意数量的报告。大多数格式我都可以使用Smarty来模拟输出。但是,输出到Excel和PDF会使事情变得复杂,需要使用FPDF或TCPDF和PHPExcel。
我试图找出通过一种或多种设计模式组织我的课程的最佳方式(如果可能的话)。
输出格式:
这些格式需要能够在内存中进行流式传输或写入文件以供以后使用。
所有报告中唯一一致的是,他们需要数据,直到添加PDF和Excel支持,模板。目前我有一个Report类,它有一个名为getData()的抽象方法。每个子类(例如,SpecificReport)获取它需要的数据并将其存储在类属性中以绑定到模板等。
每份报告都需要以各种格式提供。
Report类目前处理输出,但添加对Excel和PDF的支持使得这是不可能的。除了将数据绑定到像Smarty这样的模板之外,还有很多其他功能。每个报告都需要特定代码。我想我可以在每个报告子类中重载这些方法。
有没有人遇到类似的任务?
答案 0 :(得分:1)
听起来你可以使用Two Step View pattern。
基本上,您的报告会在两次传递中呈现。第一遍对您的模型执行报告逻辑,以生成一种原始报告对象。第一轮原始报告包含报告中的所有信息,按报告的需要进行组织和分组。
一旦完成,原始报告将被输入到一个模板中,该模板将其呈现为特定格式(pdf,xls,csv,等等)。第二遍产生报告的字节,可以存储到文件中或通过网络发送。