如何解决OroPlatform:覆盖核心实体表单构建器
上下文
我正在尝试更改核心实体之一上的一个字段的表单类型: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,'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,'form_options',['attr' => ['readonly' => true]]
)
);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。