zenify/doctrine-filters

此包已被放弃,不再维护。作者建议使用nettrine/orm包。

Doctrine Filters集成到Nette

v4.5.0 2020-10-15 11:06 UTC

README

Build Status Quality Score Code Coverage Downloads Latest stable

什么是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一个功能

我们很高兴合并你的功能!