如何解决如何从 Sylius 管理后端的表单中删除字段?
我正在开发 Sylius 应用程序,想删除后台管理中的表单。
在这种特殊情况下,字段 on_hand
(在 ProductVariant
创建和更新上下文中)不应该可用。 (因为我们直接从供应商那里获取该信息并自动将其导入数据库。)我已经找到了正确的模板 (/vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/views/ProductVariant/Tab/_inventory.html.twig
),在我的应用程序中创建了一个副本并从视图中删除了该字段。但它仍然在表单对象中。我无法以任何形式找到它。好像是生成的,但是没看到这个生成在哪里,怎么从表单生成中排除这个字段。
如何删除字段on_hand
并将其删除?
一般如何处理此类情况以及如何从 Sylius 提供的表单中查找和删除字段?
文档文章“Customizing Forms”说:
您可以:
- 添加全新的字段,
- 修改现有字段,使其成为必需,更改其 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 class ProductVariantTypeExtension extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder,array $options): void
{
$builder
// ->add(...)
// ...
->remove('onHand')
;
}
public static function getExtendedTypes(): iterable
{
return [BaseProductVariantType::class];
}
}
是正确的,它也没有被忽视。问题是,在这个地方/时间点 Form
尚未完成:字段 onHand
不存在,因此尝试删除它不会产生任何效果,因为它是稍后添加的。诀窍是推迟 ProductVariantTypeExtension
的处理。这很容易通过设置 priority
:
/config/services.yaml
...
parameters:
...
services:
...
App\Form\Extension\ProductVariantTypeExtension:
tags:
- { name: 'form.type_extension',extended_type: 'Sylius\Bundle\ProductBundle\Form\Type\ProductVariantType',priority: -1 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。