EC-CUBE4 マスタテーブルの作成
の編集
https://yassu.jp/pukiwiki/index.php?EC-CUBE4+%A5%DE%A5%B9%A5%BF%A5%C6%A1%BC%A5%D6%A5%EB%A4%CE%BA%EE%C0%AE
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
[[EC-CUBEめも]] EC-CUBE4.0.2にてマスタテーブルを新たに作成します。~ テーブル作成後、少し触ってやらないと管理画面のマスタデータ管理では表示されないので注意が必要です。 app/Customize/ 以下に Entity と Repository をそれぞれ作成します。~ namespace は Eccube から Customize へ変更します。 以下のコマンドでProxyクラスを生成します。 bin/console eccube:generate:proxies 続いて実行されるSQLを確認します。 bin/console doctrine:schema:update --dump-sql SQLを実行します。これでテーブルが作成されます。 bin/console doctrine:schema:update --dump-sql --force namespace が Eccube\Entity のものしか読み込まないため、管理画面に表示させるには MasterdataType を拡張する必要があります。 app/Customize/Form/Extension/MasterdataTypeExtension.php <?php namespace Customize\Form\Extension; use Doctrine\ORM\EntityManager; use Eccube\Form\Type\Admin\MasterdataType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; class MasterdataTypeExtension extends AbstractTypeExtension { private $entityManager; public function __construct(EntityManager $entityManager) { $this->entityManager = $entityManager; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $masterdata = []; /** @var MappingDriverChain $driverChain */ $driverChain = $this->entityManager->getConfiguration()->getMetadataDriverImpl(); /** @var MappingDriver[] $drivers */ $drivers = $driverChain->getDrivers(); foreach ($drivers as $namespace => $driver) { if ($namespace == 'Eccube\Entity' || $namespace == 'Customize\Entity') { $classNames = $driver->getAllClassNames(); foreach ($classNames as $className) { /** @var ClassMetadata $meta */ $meta = $this->entityManager->getMetadataFactory()->getMetadataFor($className); if (strpos($meta->rootEntityName, 'Master') !== false && $meta->hasField('id') && $meta->hasField('name') && $meta->hasField('sort_no') ) { $metadataName = str_replace('\\', '-', $meta->getName()); $masterdata[$metadataName] = $meta->getTableName(); } } } } $options = $builder->get('masterdata')->getOptions(); $options['choices'] = array_flip($masterdata); $builder ->add('masterdata', ChoiceType::class, $options); } /** * {@inheritdoc} */ public function getExtendedType() { return MasterdataType::class; } }
タイムスタンプを変更しない
[[EC-CUBEめも]] EC-CUBE4.0.2にてマスタテーブルを新たに作成します。~ テーブル作成後、少し触ってやらないと管理画面のマスタデータ管理では表示されないので注意が必要です。 app/Customize/ 以下に Entity と Repository をそれぞれ作成します。~ namespace は Eccube から Customize へ変更します。 以下のコマンドでProxyクラスを生成します。 bin/console eccube:generate:proxies 続いて実行されるSQLを確認します。 bin/console doctrine:schema:update --dump-sql SQLを実行します。これでテーブルが作成されます。 bin/console doctrine:schema:update --dump-sql --force namespace が Eccube\Entity のものしか読み込まないため、管理画面に表示させるには MasterdataType を拡張する必要があります。 app/Customize/Form/Extension/MasterdataTypeExtension.php <?php namespace Customize\Form\Extension; use Doctrine\ORM\EntityManager; use Eccube\Form\Type\Admin\MasterdataType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; class MasterdataTypeExtension extends AbstractTypeExtension { private $entityManager; public function __construct(EntityManager $entityManager) { $this->entityManager = $entityManager; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $masterdata = []; /** @var MappingDriverChain $driverChain */ $driverChain = $this->entityManager->getConfiguration()->getMetadataDriverImpl(); /** @var MappingDriver[] $drivers */ $drivers = $driverChain->getDrivers(); foreach ($drivers as $namespace => $driver) { if ($namespace == 'Eccube\Entity' || $namespace == 'Customize\Entity') { $classNames = $driver->getAllClassNames(); foreach ($classNames as $className) { /** @var ClassMetadata $meta */ $meta = $this->entityManager->getMetadataFactory()->getMetadataFor($className); if (strpos($meta->rootEntityName, 'Master') !== false && $meta->hasField('id') && $meta->hasField('name') && $meta->hasField('sort_no') ) { $metadataName = str_replace('\\', '-', $meta->getName()); $masterdata[$metadataName] = $meta->getTableName(); } } } } $options = $builder->get('masterdata')->getOptions(); $options['choices'] = array_flip($masterdata); $builder ->add('masterdata', ChoiceType::class, $options); } /** * {@inheritdoc} */ public function getExtendedType() { return MasterdataType::class; } }
テキスト整形のルールを表示する