bartlomiejbeta / filter-sorter-bundle
v2.1.0
2018-08-31 11:35 UTC
Requires
- php: ^7.0
- doctrine/doctrine-bundle: ^1.6
- doctrine/orm: ^2.5
- happyr/doctrine-specification: ^0.7.2
- jms/serializer-bundle: 2.3.1
- myclabs/php-enum: ^1.5
- sensio/framework-extra-bundle: ^3.0
- symfony/symfony: ^3.4|^4.0
Requires (Dev)
- phpunit/phpunit: ^5.4|^6.0
- symfony/phpunit-bridge: ~2.7
README
这个Symfony包旨在通过使用规范模式(参见 doctrine-specification)提供结构化的过滤和排序。它被设计用于API应用程序,但也可以用于标准Web应用程序。
提供以下功能:
FilterQueryManager
- 收集所有filter services
并提供一个应用了规范的表达式构建器。FilterParamConverter
- 通过查询字符串中的数据提供filter object
。SortParamConverter
- 通过查询字符串中的数据提供sort object
。
安装
1. 通过composer安装
composer require bartlomiejbeta/filter-sorter-bundle
2. 在 AppKernel
中注册包
public function registerBundles() { $bundles = array( // ... new BartB\FilterSorterBundle\FilterSorterBundle(), ); }
用法
假设您已经有了实体等。
1. 将实体父类改为 AbstractEntitySpecificationAwareRepository
示例
class CarRepository extends AbstractEntitySpecificationAwareRepository { }
2. 添加规范 (示例)
3. 添加集合过滤器 (示例)
4. 添加排序枚举 (示例)
5. 构建并注册第一个服务适配器 (适配器示例,注册适配器示例)
5. 运行 (标准,带有参数转换器的API)
$carCollectionFilter = (new CarCollectionFilter())->setGearboxType('automatic'); $carSorter = new CarSort(CarSort::FUEL_TYPE); $sortDirection = new SortDirectionType(SortDirectionType::DESC); /** @var FilterQueryManager $filterQueryManager */ $filterQueryManager = $this->filterQueryManager; $carRepository = $this->repostioryCar; $sort = new Sort($sortDirection, $carSorter); $limit = new Limit(1); $basicRepositoryDTO = new BasicRepositoryDTO($carRepository); $queryAttributesDTO = new QueryAttributesDTO($carCollectionFilter, $sort, $limit); $queryBuilder = $filterQueryManager->getQueryBuilder($basicRepositoryDTO, $queryAttributesDTO); $query = $queryBuilder->getQuery(); $result = $query->execute();
待办事项:将示例升级到symfony 3.4 我还准备了一个完整的独立示例