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
プラグインを有効化すると、「新規会員登録ページ」、マイページの「会員情報編集ページ」、管理画面の「会員登録ページ」にニックネーム項目が追加されます。
ニックネームを入力して保存するとニックネームがデータベースに保存されます。
