webfactory/visibility-filter-bundle

Symfony Bundle,以集中方式过滤不可见的 Doctrine 实体


README

此包提供了一个 Doctrine 过滤器,该过滤器可以以透明的方式为整个应用程序处理实体的可见性过滤,从而无需在每个实体的每个仓库方法中重复编写过滤语句。最值得注意的是,过滤也适用于绕过仓库的 Doctrine 查询,如实体映射中声明的关联。

入门指南

首先,您需要将此包声明为 composer 依赖项。

composer require webfactory/visibility-filter-bundle

接下来,需要将包注册到 Symfony 中。根据您的 Symfony 版本,可能如下所示

# src/bundles.php

return [
    # ...
        Webfactory\VisibilityFilterBundle\VisibilityFilterBundle::class => ['all' => true],
    # ...
];

需要手动注册过滤类。

# src/config.yml
doctrine:
    orm:
        filters:
            visibility: Webfactory\VisibilityFilterBundle\Filter\VisibilityColumnConsideringSQLFilter

重要:过滤器的 YAML 键需要为 visibility,否则过滤器在请求中不会被激活。

配置可见性列

此包假设可见性确定将基于包含可见性信息的实体中的特定字段;例如,作为包含“是”或“否”的“可见性开关”,或者包含一个基于可见性等级的量表,根据该量表确定对象的可见性。

目前,只有配置了可见性列的实体才会进行过滤。

您只需在实体上配置其哪个字段将包含可见性信息即可。您可以通过向该字段添加 VisibilityColumn() 注解来完成此操作。

use Doctrine\ORM\Mapping as ORM;
use Webfactory\VisibilityFilterBundle\Annotation\VisibilityColumn;

/**
 * @ORM\Entity()
 */
class EntityWithVisibilityColumn
{
    // ...
    /**
     * @VisibilityColumn()
     *
     * @ORM\Column(type="string")
     *
     * @var string
     */
    private $visibilityColumn;
    // ...
}

请注意,配置多个字段作为可见性列将抛出异常。

替换过滤策略

默认情况下,库仅允许您的应用程序查询其可见性列中包含字符串 y 的实体。您可以通过用您的实现覆盖服务 Webfactory\VisibilityFilterBundle\Filter\FilterStrategy 来更改此行为。

您的实现需要实现 FilterStrategy 接口。如果您只想将 y 字符串更改为其他内容,您可以使用 Webfactory\VisibilityFilterBundle\Filter\Strategy\ValueInField 实现并提供不同的 visibleValue 在其构造函数中。