【问题标题】:How to remove a field from a form in the Sylius admin backend?如何从 Sylius 管理后端的表单中删除字段?
【发布时间】:2021-03-10 14:13:46
【问题描述】:

我正在开发一个 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(...) 调用似乎被忽略了。

【问题讨论】:

    标签: symfony4 symfony-forms sylius form-fields


    【解决方案1】:

    代码

    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 }
    

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 2016-01-30
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2015-10-01
      • 2021-02-25
      相关资源
      最近更新 更多