dflydev / symfony-finder-factory
Symfony Finder Factory
v1.0.0
2012-11-09 16:45 UTC
Requires
- php: >=5.3.2
- symfony/finder: ~2.0
This package is auto-updated.
Last update: 2024-08-29 03:42:30 UTC
README
Symfony Finder (symfony/finder) 的实例工厂。
目的是能够将工厂注入到服务中创建 Finder 实例,而不是在每个服务中调用 new Finder
。
要求
- PHP 5.3+
- Symfony Finder ~2.0
安装
通过 Composer 安装 dflydev/symfony-finder-factory
用法
<?php namespace My; use Dflydev\Symfony\FinderFactory; use Dflydev\Symfony\FinderFactoryInterface; class Service { public function __construct(FinderFactoryInterface $finderFactory = null) { $this->finderFactory = $finderFactory ?: new FinderFactory; } public function doThingsWithTempFiles() { $finder = $this->finderFactory->create(); $finder->in(sys_get_temp_dir()); // do stuff with temp files } }
使用场景
如果类中调用 new Finder
,模拟 Finder 将会非常困难。通过注入模拟的 Finder 工厂,我们可以在测试过程中有机会获取模拟的 Finder 实例。
以下是一个示例
<?php namespace My; use Dflydev\Symfony\FinderFactory; use Dflydev\Symfony\FinderFactoryInterface; use Symfony\Component\Finder\Finder; class Service { public function __construct(FinderFactoryInterface $finderFactory = null) { $this->finderFactory = $finderFactory ?: new FinderFactory; } public function findTmpFilesNew() { // Potential for mocked injected Finder Factory to return // a mocked Finder instance. $finder = $this->finderFactory->create(); return $finder->in(sys_get_temp_dir()); } public function findTmpFilesOld() { // Difficult to Mock $finder = new Finder; return $finder->in(sys_get_temp_dir()); } }
许可证
MIT,见 LICENSE。
社区
如果您有疑问或想帮忙,请加入 irc.freenode.net 上的 #dflydev 频道。
非原创
本项目基于之前提交给 Symfony 核心的作品 (symfony/symfony#5650),但被拒绝。