idct / symfony-form-soft-delete-aware-entity-type-ux-autocomplete
为SoftDeleteAwareEntityType添加对Soft Delete过滤行为支持的symfony/ux-autocomplete插件
Requires
- idct/symfony-form-soft-delete-aware-entity-type: ^1.0.2
- symfony/routing: ^6 || ^7
- symfony/ux-autocomplete: ^2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- phpunit/phpunit: ^11
README
从doctrine/extensions中的softdeleteable
到Symfony表单组件和Symfony UX Autocomplete之间的缺失链接。
警告!
如果您需要使用此功能,这很可能意味着您的软件架构有问题。如果您允许删除或软删除,应首先确保每个相关实体都已用null
或新的关系更新。此表单类型旨在用于需要快速在用于关系的某些实体上添加软删除的系统中的过渡目的,但由于时间或其他资源,无法升级实际流程。
目的
如果您正在使用softdeleteable
过滤器和EntityType
表单,您可能会遇到相关实体已通过软删除不再可用的情况。此表单类型将确保表单正确渲染,但强制用户使用表单更新关系。
在这种情况下,使用标准实体类型,您可能看到如下屏幕
如果您安装了包idct/symfony-form-soft-delete-aware-entity-type并使用SoftDeleteAwareEntityType
,它将强制用户更新
此包、扩展为处理软删除实体添加了对symfony/ux-autocomplete
的支持
兼容性
- Symfony 6或7。
- Sonata Admin 3+
安装
首先在项目中引入它
composer require idct/symfony-form-soft-delete-aware-entity-type-ux-type
注意:您还需要配置idct/symfony-form-soft-delete-aware-entity-type
。
由于这不是一个在您的services
(例如services.yaml
)文件中注册的bundle,因此
如果您使用自动装配
IDCT\SymfonyFormSoftDeleteAwareEntityType\SoftDeleteAwareEntityType: ~ IDCT\SymfonyFormSoftDeleteAwareEntityType\Ux\BaseSoftDeleteEntityAutocompleteType: ~
如果您不使用自动装配,您需要将doctrine作为第一个参数传递
IDCT\SymfonyFormSoftDeleteAwareEntityType\SoftDeleteAwareEntityType: arguments: - '@doctrine' IDCT\SymfonyFormSoftDeleteAwareEntityType\Ux\BaseSoftDeleteEntityAutocompleteType: ~ arguments: - '@doctrine'
现在创建您的自动完成表单类型类,与UX自动完成类似,但使用此包中的父类
<?php declare(strict_types=1); namespace App\Form; use App\Entity\DeletableEntity; use IDCT\SymfonyFormSoftDeleteAwareEntityType\Ux\BaseSoftDeleteEntityAutocompleteType; use Praetorian\Sportsbook\Orm\Entity\Currency; use Symfony\Component\Form\AbstractType; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\UX\Autocomplete\Form\AsEntityAutocompleteField; #[AsEntityAutocompleteField] class EntityWithDeletableRelationAutocompleteType extends AbstractType { public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'class' => DeletableEntity::class, 'placeholder' => 'placeholder', 'choice_label' => 'name' ]); } public function getParent(): string { return BaseSoftDeleteEntityAutocompleteType::class; } }
这就完成了!其余的是正常表单使用。
测试
工具已准备好使用Docker的测试工具链。如果您已安装Docker,只需运行./run-tests.sh
。
这将运行单元测试、生成代码覆盖率报告,并使用Behat和Chrome Driver运行一些功能e-2-e测试。
贡献
任何贡献都受欢迎,请提交任何问题或拉取请求,在可能的情况下,请确保测试正在运行。