dflydev/symfony-finder-factory

v1.0.0 2012-11-09 16:45 UTC

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),但被拒绝。