schvoy/base-entity-bundle

一个为Symfony项目提供基础doctrine实体和行为的包。

安装: 64

依赖: 3

建议者: 0

安全: 0

星级: 5

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.5 2024-09-15 21:42 UTC

This package is auto-updated.

Last update: 2024-09-15 21:43:45 UTC


README

一个为Symfony项目提供基础doctrine实体和行为的包。

安装

composer require schvoy/base-entity-bundle

用法

将基础实体用作映射超类

class <your-entity-name> extends UuidBasedEntity
class <your-entity-name> extends UlidBasedEntity
class <your-entity-name> extends IdBasedEntity

它们都提供了常用的实体功能

  • $id 属性与 getId() / setId() 方法 - 基于类名的值可以是整数、Uuid或Ulid
  • 时间戳行为
    • $createdAt
    • $updatedAt
  • 软删除行为
    • $deletedAt
  • 责任行为
    • $createdBy
    • $updatedBy
    • $deletedBy

仅特性?是的

如果您不想使用映射超类?那么您可以使用仅特性。在这种情况下,您可以使用您想要的特性扩展您的实体类。

# Id entity traits
use IdBasedEntityTrait;
use UuidBasedEntityTrait;
use UliddBasedEntityTrait;

# Doctrine Behavior traits
use BlameableTrait;
use SoftDeleteableTrait;
use TimestampableTrait;

Doctrine行为

最初,此包使用 KnpLabs/DoctrineBehaviors,但存在维护者问题。因此,此包包含基于原始包的最常用行为的新的实现。

实现与原始包不是100%等效。

行为事件的事件监听器将自动加载,但为了Blameable行为,您必须定义您的User类是哪个(请参阅配置部分)。

附加到基础实体的行为接口有内置实现,但您可以根据需要定义自己的实现。

时间戳

时间戳处理在持久化和更新期间创建的 createdAtupdatedAt 字段。

您的实体必须实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\TimestampableInterface

软删除

该行为在数据库中保留数据而不进行实际删除,它只是将实体的 deletedAt 值设置。

此包为此行为提供了实体上的额外帮助方法

  • delete()
  • restore()
  • isDeleted()
  • willBeDeleted()

您的实体必须实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\SoftdeletableInterface

责任

跟踪在持久化、更新或删除实体期间对实体所做的更改(仅与软删除一起工作)。

当实体实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\BlamableInterface 时,默认情况下会在持久化和更新期间跟踪 createdByupdatedBy 字段。

要跟踪删除时的 deletedBy,则您的实体必须实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\SoftdeletableInterface

即使不使用软删除行为,也会将 deletedBy 字段添加到实体中,但它的值始终为null。

配置参考

Blameable行为的必需配置

doctrine:
    orm:
        resolve_target_entities:
            Symfony\Component\Security\Core\User\UserInterface: Your\Namespace\User

更多信息:[https://symfony.com.cn/doc/current/doctrine/resolve_target_entity.html](https://symfony.com.cn/doc/current/doctrine/resolve_target_entity.html)