idct / symfony-form-soft-delete-aware-entity-type
仓库,为 Symfony 的 EntityType 添加了对软删除过滤行为的支持。
Requires
- doctrine/orm: ^2|^3
- gedmo/doctrine-extensions: ^3
- symfony/doctrine-bridge: ^6 || ^7
- symfony/form: ^6 || ^7
- symfony/options-resolver: ^6 || ^7
- symfony/property-access: ^6 || ^7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- phpunit/phpunit: ^11
README
从 doctrine/extensions(https://github.com/doctrine-extensions/DoctrineExtensions)的 softdeleteable 到 Symfony 表单组件之间缺失的链接。
警告!
如果您需要使用它,这很可能意味着您的软件架构存在问题。如果您允许删除或软删除,应首先确保每个相关实体首先使用 null
或新关系进行更新。此表单类型旨在用于需要快速为某些用于关系的实体添加软删除的系统中的过渡目的,但由于时间或其他资源,无法升级实际流程。
目的
如果您正在使用 softdeleteable
过滤器和 EntityType
表单,您可能会遇到相关实体已作为软删除不再可用的 CRUD 编辑表单的情况。此表单类型将确保表单仍然可以正确渲染,但会强制用户通过表单更新关系。
在这种情况下,使用标准实体类型,您可能会看到如下屏幕:
使用 SoftDeleteAwareEntityType
时,它将回退到占位符,强制用户更新。
兼容性
- Symfony 6 或 7。
- Sonata Admin 3+
安装
首先在您的项目中要求它
composer require idct/symfony-form-soft-delete-aware-entity-type
由于这不是一个 bundle,请在您的 services
(例如 services.yaml
)文件中进行注册
如果您有自动注入
IDCT\SymfonyFormSoftDeleteAwareEntityType\SoftDeleteAwareEntityType: ~
如果您不使用自动注入,您需要将 doctrine 作为第一个参数传递
IDCT\SymfonyFormSoftDeleteAwareEntityType\SoftDeleteAwareEntityType: arguments: - '@doctrine'
现在在使用 EntityType
的表单中,将表单类型更改为 SoftDeleteAwareEntityType
。例如
class ParentFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('test', SoftDeleteAwareEntityType::class, [ 'class' => DummyEntity::class ]) ; } }
这就完成了!
测试
工具已经准备了使用 Docker 的测试工具链。如果您已安装 Docker,只需运行 ./run-tests.sh
。
这将运行单元测试,使用 PHPUnit 生成代码覆盖率报告,并使用 Behat 和 Chrome Driver 运行一些功能性的 e-2-e 测试。
贡献
欢迎任何贡献,请提交任何问题或拉取请求,尽可能确保测试正在运行。