Symfony4 如何从Sylius admin后端的表单中删除字段?
我正在处理一个Sylius应用程序,希望在管理后端删除一个表单 在这种特殊情况下,手头的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),在我的应用程序中创建了一个副本,并从视图中删除了该
字段(在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}