schvoy / base-entity-bundle
一个为Symfony项目提供基础doctrine实体和行为的包。
Requires
- php: >=8.3
- doctrine/doctrine-bundle: ^2.12
- doctrine/orm: ^3.2
- symfony/framework-bundle: ^7.1
- symfony/security-bundle: ^7.1
- symfony/uid: ^7.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.58
- phpunit/phpunit: ^11.1
- symfony/yaml: ^7.1
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类是哪个(请参阅配置部分)。
附加到基础实体的行为接口有内置实现,但您可以根据需要定义自己的实现。
时间戳
时间戳处理在持久化和更新期间创建的 createdAt
和 updatedAt
字段。
您的实体必须实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\TimestampableInterface
。
软删除
该行为在数据库中保留数据而不进行实际删除,它只是将实体的 deletedAt
值设置。
此包为此行为提供了实体上的额外帮助方法
- delete()
- restore()
- isDeleted()
- willBeDeleted()
您的实体必须实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\SoftdeletableInterface
。
责任
跟踪在持久化、更新或删除实体期间对实体所做的更改(仅与软删除一起工作)。
当实体实现 Schvoy\BaseEntityBundle\Entity\Interfaces\Behavior\BlamableInterface
时,默认情况下会在持久化和更新期间跟踪 createdBy
和 updatedBy
字段。
要跟踪删除时的 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)