EC-CUBE4で会員情報項目を追加するプラグインを作る方法です。
まず最初にコマンドでプラグインの雛形を生成します。
bin/console eccube:plugin:generate
上記コマンドを実行するとプラグインジェネレータのウィザードが開始されますので任意のテキストを入力してください。
今回は会員情報にニックネームを追加します。
EC-CUBE Plugin Generator Interactive Wizard =========================================== name [EC-CUBE Sample Plugin]: > ニックネーム code [Sample]: > Nickname ver [1.0.0]: > 1.0.0
入力が完了したらPluginディレクトリ内にNicknameディレクトリが自動で生成されます。
会員情報テーブルにニックネームフィールドを追加
会員情報テーブル(dtb_customer)にニックネームフィールドを追加するため、Customer Entityをtraitと@EntityExtension アノテーションを使って拡張します。
CustomerTraitを作成してEntityディレクトリに配置してください。
サンプルコードは以下のとおりです。
<?php namespace Plugin\Nickname\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation as Eccube; /** * @Eccube\EntityExtension("Eccube\Entity\Customer") */ trait CustomerTrait { /** * @ORM\Column(name="nickname", type="string", length=255, nullable=true) */ private $nickname; public function getNickname() { return $this->nickname; } public function setNickname($nickname) { $this->nickname = $nickname; return $this; } }
EC-CUBE4のドキュメントにもEntityの拡張方法が掲載されています。
フォームにニックネーム項目を追加
ニックネームカラムを追加したので、次はフォームにニックネームを追加します。
先程作成したCustomerTraitのnicknameフィールドに@FormAppend アノテーションを追加します。
@FormAppend アノテーションを追加することでニックネーム項目が自動で生成されます。
<?php namespace Plugin\Nickname\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation as Eccube; use Symfony\Component\Validator\Constraints as Assert; /** * @Eccube\EntityExtension("Eccube\Entity\Customer") */ trait CustomerTrait { /** * @ORM\Column(name="nickname", type="string", length=255, nullable=true) * @Eccube\FormAppend( * auto_render=true, * type="\Symfony\Component\Form\Extension\Core\Type\TextType", * options={ * "required": true, * "label": "ニックネーム" * } * ) * @Assert\NotBlank(message="ニックネームを入力してください") */ private $nickname; public function getNickname() { return $this->nickname; } public function setNickname($nickname) { $this->nickname = $nickname; return $this; } }
@FormAppend アノテーションのauto_renderをfalseにして、form_themeに自作のフォームのパスを指定するとオリジナルの入力項目が作成できます。
@FormAppend アノテーションのtypeは入力項目の種類を指定しています。今回はTextTypeを指定しています。
@FormAppend アノテーションのoptionsはlabelやrequiredなどのオプションが指定できます。
@NotBlankで入力チェックも出来ます。
詳しくはEC-CUBE4ドキュメントの「Entity からフォームを自動生成する」をご確認ください。
以上でプラグインは完成です。
動作確認のためコマンドでプラグインをインストールして有効化します。
プラグインのインストールと有効化
プラグインはコマンドでインストールと有効化が出来ます。
プラグインのインストール方法は以下のとおりです。
bin/console eccube:plugin:install --code Nickname
プラグインの有効化の方法は以下のとおりです。
bin/console eccube:plugin:enable --code Nickname
プラグインを有効化すると、「新規会員登録ページ」、マイページの「会員情報編集ページ」、管理画面の「会員登録ページ」にニックネーム項目が追加されます。
ニックネームを入力して保存するとニックネームがデータベースに保存されます。