OroPlatform: добавить настраиваемое поле в основной объект

#symfony #orocommerce

#symfony #orocommerce

Вопрос:

В настоящее время я работаю над проектом OroPlatform, и мне нужно добавить настраиваемое поле в BusinessUnit основной объект.

Я прочитал раздел документации Oro о способе расширения основных объектов: https://doc.oroinc.com/backend/entities/extend-entities/#id1

 <?php
namespace MyBundleBundleAppBundleMigrationsSchemav1_0;

use DoctrineDBALSchemaSchema;
use OroBundleEntityExtendBundleEntityConfigExtendScope;
use OroBundleMigrationBundleMigrationMigration;
use OroBundleMigrationBundleMigrationQueryBag;

class AddColumnsToBusinessUnit implements Migration
{
    public function up(Schema $schema, QueryBag $queries)
    {
        $table = $schema->getTable('oro_business_unit');
        $table->addColumn('siret', 'string', [
            'oro_options' => [
                'extend' => ['owner' => ExtendScope::OWNER_CUSTOM],
                'entity' => ['label' => 'siret'],
            ],
        ]);
    }
}
 

Когда я запускаю команду symfony console oro:migration:load --force , она работает, и миграция применяется к моей базе данных.

Теперь мне нужно обязательное поле. Я видел инструкцию 'notnull' => true по настройке поля, не подлежащего обнулению, в базе данных.

Все работает хорошо, но мое поле не имеет никакой проверки JavaScript на organization/business_unit/create маршруте. Есть идеи?

Ответ №1:

Вы можете проверить новое поле, расширив метаданные проверки, которые уже определены для расширяемой базовой сущности.

Для этого, пожалуйста, следуйте официальной документации Symfony и используйте формат YML: https://symfony.com/doc/4.4/validation.html#constraint-configuration

Ограничение, которое вы можете использовать для поля, — «не пустое».

Вот пример:

 # src/<YourBundlePath>/Resources/config/validation.yml
OroBundleOrganizationBundleEntityBusinessUnit:
    properties:
        siret:
            - NotBlank: ~
 

Комментарии:

1. Вау, спасибо тебе @Andrey Yatsenko, это абсолютно то, что мне было нужно! Рекомендуется ли добавлять 'notnull' => true в мой файл миграции? Если это так, как я могу переопределить LoadOrganizationAndBusinessUnitData.php fixture из OrganizationBundle по умолчанию?

2. Значение notnull в миграции в порядке, как только оно будет обработано в коде. Вы можете переопределить миграцию, запустив другую зависимую миграцию после исходной и изменив данные, загруженные предыдущей миграцией.