carlosv2/funnel

小型测试仓库增强器

1.1.3 2017-02-10 22:54 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:47:50 UTC


README

小型测试仓库增强器。

License Build Status SensioLabsInsight

此项目旨在为everzet/persisted-objects提供快速便捷的过滤功能。

用法

您只需用carlosV2\Funnel\Funnel装饰测试仓库。例如

use carlosV2\Funnel\Funnel;
use Everzet\PersistedObjects\Repository;

class MyTestingRepository
{
    /**
     * @var Funnel
     */
    private $repository;
    
    /**
     * @param Repository $repository
     */
    public function __construct(Repository $repository)
    {
        $this->repository = new Funnel($repository);
    }
    
    // ...
}

Funnel还实现了Everzet\PersistedObjects\Repository,因此您不会失去任何功能,反而会获得更多功能。

  • findAll(): 返回包含所有对象的数组。这是getAll的别名。
  • findBy(callable): 返回包含所有匹配对象的数组。如果没有找到,则返回空数组。
  • findOneBy(callable): 返回第一个匹配的对象或如果没有找到,则返回null。
  • countBy(callable): 返回表示匹配对象数量的整数。

例如

$objects = $funnel->findBy(function ($object) {
    return $object->getData() === 'foo';
});

此外,Funnel提供了一些通用的过滤器,可用于加速开发。

这些过滤器可以通过应用以下规则(其中"非"是可选的)组合成新的方法

   find |
findOne > + By + [Not] + Filter
  count |

例如

  • findByProperty(...): 查找具有给定属性和值的所有对象。
  • findOneByMethod(...): 查找第一个匹配给定方法和值的对象。
  • countByNotType(...): 计算所有没有给定类型的对象。

如果提供的过滤器中没有符合您要求的内容,您还可以向Funnel添加自己的过滤器,以便在组合新方法时使用。

请随意提交包含您自己的通用过滤器的pull request! :)

或者,您可以装饰一个数组,以便在其上方提供Funnel API。例如

$myArray = [$obj1, $obj2, $obj3];

// Any Funnel-compatible method can be used here
Funnel($myArray)->countByType(\DateTime::class);

安装

打开命令行控制台,进入您的项目目录,并执行以下命令以下载此项目的最新稳定版本

$ composer require carlosv2/funnel

此命令要求您全局安装了Composer,如Composer文档的安装章节中所述。