簡體   English   中英

OroPlatform:覆蓋核心實體表單構建器

[英]OroPlatform: Override core entity form builder

語境

我正在嘗試更改核心實體之一上一個字段的表單類型: Business Unit

默認表單字段是TextField ,我想將其更改為ChoiceType

這是我使用遷移創建的業務單位實體的自定義字段:

$table->addColumn('periodicite', 'string', [
    'oro_options' => [
        'extend' => ['owner' => ExtendScope::OWNER_CUSTOM],
        'entity' => ['label' => 'Périodicité'],
    ],
]);

問題

我在 Oro 文檔中看到entity_config.yml可以解決我的問題。 我試圖把這些線,但它不工作:

entity_config:
    business_unit:
          entity:
              items:
                  periodicite:
                      form:
                          type: Symfony\Component\Form\Extension\Core\Type\ChoiceType
                          options:
                            choices:
                              Mensuel: Mensuel
                              Trimestriel: Trimestriel
                            placeholder: false
                            required: true
                            label: "Périodicite"

我還嘗試創建一個新的遷移來更改我的自定義字段上的字段類型,但它不起作用

<?php

namespace Baltimore\Bundle\AppBundle\Migrations\Schema\v1_1;

use Doctrine\DBAL\Schema\Schema;
use Oro\Bundle\EntityConfigBundle\Migration\UpdateEntityConfigFieldValueQuery;
use Oro\Bundle\EntityExtendBundle\EntityConfig\ExtendScope;
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtension;
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtensionAwareInterface;
use Oro\Bundle\MigrationBundle\Migration\Migration;
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
use Oro\Bundle\OrganizationBundle\Entity\BusinessUnit;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class UpdateBusinessUnitField implements Migration, ExtendExtensionAwareInterface
{
    /** @var ExtendExtension */
    protected $extendExtension;

    /**
     * @inheritdoc
     */
    public function setExtendExtension(ExtendExtension $extendExtension)
    {
        $this->extendExtension = $extendExtension;
    }

    public function up(Schema $schema, QueryBag $queries)
    {
        $queries->addQuery(
            new UpdateEntityConfigFieldValueQuery(
                BusinessUnit::class,
                'periodicite',
                'form',
                'form_type',
                ChoiceType::class
            )
        );

        $queries->addQuery(
            new UpdateEntityConfigFieldValueQuery(
                BusinessUnit::class,
                'periodicite',
                'form',
                'form_options',
                [
                    'choices' => [
                        'Mensuel' => 'Mensuel',
                        'Trimestriel' => 'Trimestriel',
                        'Annuel' => 'Annuel',
                    ],
                ]
            )
        );
    }
}

我在遷移文件中找到了一個使用changeColumn方法的解決方案,它就像一個魅力。

順便說一句,這些屬性也適用於addColumn方法。

public function up(Schema $schema, QueryBag $queries)
{
    $table = $schema->getTable('oro_business_unit');

    $table->changeColumn('periodicite', [
        'oro_options' => [
            'extend' => ['owner' => ExtendScope::OWNER_CUSTOM],
            'entity' => ['label' => 'Périodicité'],
            'form' => [
                'form_type' => ChoiceType::class,
                'form_options' => [
                    'choices' => [
                        'Mensuel' => 'Mensuel',
                        'Trimestriel' => 'Trimestriel',
                        'Semestriel' => 'Semestriel',
                        'Annuel' => 'Annuel'
                    ]
                ]
            ],
        ],
    ]);
}

我不知道使用 YAML 文件覆蓋實體配置元數據的可能性。 如果有 - 請在評論中分享您用於實現它的文檔。

但是可以肯定的是,您可以使用架構遷移來管理相同的內容,如下例所示:

class UpdateOpportunityRelationFormType implements Migration
{
    /**
     * {@inheritdoc}
     */
    public function up(Schema $schema, QueryBag $queries)
    {
        $queries->addQuery(
            new UpdateEntityConfigFieldValueQuery(
                Quote::class,
                'opportunity',
                'form',
                'form_type',
                OpportunitySelectType::class
            )
        );

        $queries->addQuery(
            new UpdateEntityConfigFieldValueQuery(
                Quote::class,
                'opportunity',
                'form',
                'form_options',
                ['attr' => ['readonly' => true]]
            )
        );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM