zenify / doctrine-filters
v4.5.0
2020-10-15 11:06 UTC
Requires
- php: ^7.0
- doctrine/orm: ~2.5
- nette/application: ^3.0
- nette/di: ^3.0
- symplify/symfony-event-dispatcher: ~1.2
Requires (Dev)
- nette/bootstrap: ^3.0
- phpunit/phpunit: ^5.6
- symfony/console: ~3.0
- tracy/tracy: ~2.4
- zenify/coding-standard: ^4.0
README
什么是Doctrine Filters?查看这些幻灯片或查看用法以获取知识。
它们默认存在于Doctrine中。此包仅简化了模块化应用中的使用。
安装
$ composer require zenify/doctrine-filters
在config.neon
中注册扩展
extensions: - Zenify\DoctrineFilters\DI\FiltersExtension - Symplify\SymfonyEventDispatcher\Adapter\Nette\DI\SymfonyEventDispatcherExtension # Kdyby\Doctrine or another Doctrine to Nette implementation
用法
让我们创建我们的第一个过滤器,它将在前端隐藏所有已删除的项目。这就是所谓的“软删除”——数据仍然在数据库中,但在前端被过滤掉。
首先,我们创建一个实现Zenify\DoctrineFilters\Contract\FilterInterface的类。
use Doctrine\ORM\Mapping\ClassMetadata; use Zenify\DoctrineFilters\Contract\FilterInterface; final class SoftdeletableFilter implements FilterInterface { public function addFilterConstraint(ClassMetadata $entity, string $alias) : string { if ($entity->getReflectionClass()->hasProperty('isDeleted')) { return "$alias.isDeleted = 0"); } return ''; } }
然后注册为服务
# app/config/config.neon services: - SoftdeletableFilter
就这样!
按角色限制访问
管理层希望只向具有admin角色的已登录用户显示已删除的内容。
要设置条件,我们只需实现Zenify\DoctrineFilters\Contract\ConditionalFilterInterface。
use Nette\Security\User; use Zenify\DoctrineFilters\Contract\ConditionalFilterInterface; final class SoftdeletableFilter implements ConditionalFilterInterface { /** * @var User */ private $user; public function __construct(User $user) { $this->user = $user; } public function addFilterConstraint(ClassMetadata $entity, string $alias) : string { // same as above } public function isEnabled() : bool { if ($this->user->isLoggedIn() && $this->user->hasRole('admin')) { return FALSE; } return TRUE; } }
就是这样!
测试
composer check-cs vendor/bin/phpunit
贡献
规则很简单
- 新功能需要测试
- 所有测试都必须通过
- 每个PR一个功能
我们很高兴合并你的功能!