[[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;
     }
 }


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS