【EC-CUBE4】会員情報項目を追加するプラグインを作る方法

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

プラグインを有効化すると、「新規会員登録ページ」、マイページの「会員情報編集ページ」、管理画面の「会員登録ページ」にニックネーム項目が追加されます。

ニックネームを入力して保存するとニックネームがデータベースに保存されます。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください