bukashk0zzz / filter-bundle
Symfony 过滤器包。
v5.0.1
2023-01-16 08:32 UTC
Requires
- php: >=8.0.0
- doctrine/orm: ^2.5
- laminas/laminas-filter: ^2.9
- symfony/cache: ^5.4|^6.0
- symfony/config: ^5.4|^6.0
- symfony/dependency-injection: ^5.4|^6.0
- symfony/form: ^5.4|^6.0
- symfony/http-kernel: ^5.4|^6.0
- symfony/yaml: ^5.4|^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^8.4
- symfony/validator: ^5.4|^6.0
README
关于
此包添加了一个服务,可用于根据注解过滤对象值。旧版本使用Laminas 过滤器和ZendFilters进行过滤。此外,如果找到带有注解的实体,包还可以过滤表单。如果启用 auto_filter_forms
,实体在验证之前将被过滤。Laminas 过滤器文档
使用 Symfony Flex 安装
composer config extra.symfony.allow-contrib true
composer require bukashk0zzz/filter-bundle
不使用 Symfony Flex 安装
composer require bukashk0zzz/filter-bundle
将包添加到 app/AppKernel.php
$bundles = array( // ... other bundles new Bukashk0zzz\FilterBundle\Bukashk0zzzFilterBundle(), );
配置
将以下内容添加到您的 config.yml
bukashk0zzz_filter: # Enable if you need auto filtering form data before constraint(Validation) check auto_filter_forms: false
使用
该包提供一种注解,允许在实体中过滤字段。
将以下类添加到您的实体类的 use
部分。
use Bukashk0zzz\FilterBundle\Annotation\FilterAnnotation as Filter;
注解 @Filter
有一个必需选项 filter,其值应该是 Laminas 过滤器类的名称。它可以设置为 @Filter("StringTrim")
或 @Filter(filter="AppBundle\Filter\MyCustomFilter")
。
AppBundle\Filter\MyCustomFilter
- 在此示例中,必须是一个继承自 \Laminas\Filter\AbstractFilter
的类
还有一个非必需选项 options
- 它必须是数组类型,并将通过 Laminas 过滤器的 setOptions
方法传递给 Laminas 过滤器。
示例实体
<?php namespace AppBundle\Entity; use Bukashk0zzz\FilterBundle\Annotation\FilterAnnotation as Filter; /** * User Entity */ class User { #[Filter(parameters: [ 'filter' => 'StripTags', 'options' => ['allowTags' => 'br'] ])] #[Filter(parameters: ['filter' => 'StringTrim'])] #[Filter(parameters: ['filter' => 'StripNewlines'])] protected $name; #[Filter(parameters: ['filter' => 'StripTags'])] #[Filter(parameters: ['filter' => 'StringTrim'])] #[Filter(parameters: ['filter' => 'AppBundle\Filter\MyCustomFilter'])] protected $about; }
使用过滤服务
使用 bukashk0zzz_filter.filter
服务和实体中的注解来过滤数据。
public function indexAction() { $entity = new \Acme\DemoBundle\Entity\SampleEntity(); $entity->name = "My <b>name</b>"; $entity->email = " email@mail.com"; $filterService = $this->get('bukashk0zzz_filter.filter'); $filterService->filterEntity($entity); return ['entity' => $entity]; }