Blog

ブログ

【ECCUBE4】eccubeでenumを使いたい!

eccubeでenumを使いたい!

ECcubeでは固定値などはMasterにレコードを追加して、
使いたい場合は都度DBからレコードを検索して使用しているかと思います。

ですがいちいちDBに接続&検索をして使うのは…という場合にこんなやり方もあります。
enumの追加&使用方法を簡単ですがご紹介したいと思います。

まず、Customize配下にEnumディレクトリを追加

下記のようなファイルを作成

<?php
namespace Customize\Enum;
/**
* 会員ランク
*/
enum CustomerRankType: string
{
  case ROOKIE = ‘1’;
  case BRONZE = ‘2’;
  case SILVER = ‘3’;
  case GOLD = ‘4’;
  case PLATINUM = ‘5’;
  case DIAMOND = ‘6’;
  case MASTER = ‘7’;
  public function getLabel(): string
  {
   return match ($this) {
     self::ROOKIE => ‘ルーキー’,
     self::BRONZE => ‘ブロンズ’,
     self::SILVER => ‘シルバー’,
     self::GOLD => ‘ゴールド’,
     self::PLATINUM => ‘プラチナム’,
     self::DIAMOND => ‘ダイアモンド’,
     self::MASTER => ‘マスター’,
    };
  }
  public static function getTypeList()
  {
   $allList = [];
   foreach (self::cases() as $item) {
     $allList[$item->getLabel()] = $item->value;
   }
   return $allList;
  }
}

使用方法ですが、例えばFormTypeで使用する場合は下記のようにすれば使用できます。

->add(‘customer_rank’, ChoiceType::class, [
‘required’ => false,
expanded’ => false,
‘multiple’ => false,
‘placeholder’ => ‘選択してください’,
‘choices’ => CustomerRankType::typeList(),
])

Twigにはこんな感じです

<div class=”row mb-2″>
  <div class=”col-3″>
    <span>{{ ‘会員スペシャルランク’|trans }}</span>
    <span class=”badge bg-primary ms-1″>{{ ‘admin.common.required’|trans }}</span>
  </div>
  <div class=”col”>
    <div class=”row”>
      <div class=”col”>
        {{ form_widget(form.customer_rank) }}
      </div>
    </div>
  </div>
</div>

こんな感じで表示することができました。

ぜひ機会があればですが、検討してみてください。