Symfony4 如何从Sylius admin后端的表单中删除字段?

Symfony4 如何从Sylius admin后端的表单中删除字段?,symfony4,symfony-forms,sylius,form-fields,Symfony4,Symfony Forms,Sylius,Form Fields,我正在处理一个Sylius应用程序,希望在管理后端删除一个表单 在这种特殊情况下,手头的字段(在ProductVariant创建和更新上下文中)不应可用。(因为我们直接从供应商那里获得信息并自动导入数据库。)我已经找到了正确的模板(/vendor/sylius/sylius/src/sylius/Bundle/AdminBundle/Resources/views/ProductVariant/Tab/_inventory.html.twig),在我的应用程序中创建了一个副本,并从视图中删除了该

我正在处理一个Sylius应用程序,希望在管理后端删除一个表单

在这种特殊情况下,手头的
字段(在
ProductVariant
创建和更新上下文中)不应可用。(因为我们直接从供应商那里获得信息并自动导入数据库。)我已经找到了正确的模板(
/vendor/sylius/sylius/src/sylius/Bundle/AdminBundle/Resources/views/ProductVariant/Tab/_inventory.html.twig
),在我的应用程序中创建了一个副本,并从视图中删除了该字段。但它仍然是形式对象。我找不到任何形式的。它似乎是生成的,但我不知道在哪里生成,也不知道如何从表单生成中排除该字段

如何删除手上的字段
并将其删除?

一般来说,如何处理Sylius提供的此类情况,并从表单中查找和删除字段


docu的文章“”说:

你可以:

  • 添加全新的字段
  • 修改现有字段,使其成为必需字段,更改其HTML类,更改标签等
  • 删除未使用的字段
…并显示了“如果您计划添加新字段”的操作。但它并没有解释如何删除字段,而且似乎比添加字段要复杂一些


到目前为止,我尝试的是:

final class ProductVariantTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            // ->add(...)
            // ...
            ->remove('onHand')
        ;
    }
    public static function getExtendedTypes(): iterable
    {
        return [BaseProductVariantType::class];
    }
}
但是
remove(…)
调用似乎被忽略了。

代码

final类ProductVariantTypeExtension扩展了AbstractTypeExtension
{
公共函数buildForm(FormBuilderInterface$builder,array$options):无效
{
$builder
//->添加(…)
// ...
->删除('现有')
;
}
公共静态函数getExtendedTypes():iterable
{
返回[BaseProductVariantType::class];
}
}
是正确的,也没有被忽视。问题是,在这个地方/时间点,
表单
尚未完成:现有的
字段
不在那里,因此尝试删除它不会有任何效果,因为它是稍后添加的。诀窍是延迟处理
ProductVariantTypeExtension
。通过设置
优先级
,可以轻松完成此操作:

/config/services.yaml

。。。
参数:
...
服务:
...
App\Form\Extension\ProductVariantTypeExtension:
标签:
-{name:'form.type_extension',extended_type:'Sylius\Bundle\ProductBundle\form\type\ProductVariantType',优先级:-1}