だ。ログ。

開発とかスノボとかやきうとか。

EC-CUBE3の管理画面でフィールドを追加するのは大変だ。

2系で開発をしていた事もあり、その杵柄があるから~とかなり緩く考えていましたが間違い。
例として顧客に新しいフィールドを追加する為のまとめ。

DBカラムの追加

対象テーブル:dtb_customer
追加カラム:hoge text nullを許可する

更新対象ファイル

/src/Eccube/Entity/customer.php
/src/Eccube/Resource/doctrine/Eccube.Entity.Customer.dcm.yml
/src/Eccube/Form/Type/Admin/CustomerType.php
/template/admin/Product/edit.twig

ファイル修正は4ファイル、かなり点在しているので管理がちょっと面倒になってしまっている印象。

1. クラス内への宣言の記述

/src/Eccube/Entity/customer.php

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $Orders;
	//この辺に追加
	private $hoge;
	//ファイル末尾に追加
	public function getHoge(){
		return $this->hoge;
	}
	public function setHoge($hoge){
		$this->hoge = $hoge;
		return $this;
	}

クラス内に$hogeと言う宣言をし、セットとゲットの2つの宣言を行う。

2. 追加したカラム定義をプログラムに追加

/src/Eccube/Resource/doctrine/Eccube.Entity.Customer.dcm.yml

	//fields:内に追加
        yone:
            type: text
            nullable: true

※注意 エディタのTabインデントをするとエラーになります。半角スペースのみインデント可

3. 管理画面のフォームで呼び出せるように定義の追加

/src/Eccube/Form/Type/Admin/CustomerType.php

	//$builderに追加
            ->add('hoge', 'textarea', array(
                'label' => 'ほげほげ',
                'required' => false,
            ))

4. テンプレートファイルに設定を呼び出す

/template/admin/Product/edit.twig

	{# 任意の場所に #}
        <div id="detail_box__hoge" class="form-group">
            {{ form_label(form.hoge) }}
            <div class="col-sm-9 col-lg-10">
                <div class="form-inline">
                    {{ form_widget(form.hoge) }}
                    {{ form_errors(form.hoge) }}
                </div>
            </div>
        </div>


4ステップをアップロード後、会員管理の編集でフィールドが追加されていることと
入力したデータがDBに登録されている事を確認。

フィールド追加に関してはそこまで難しい処理ではなさそう。むしろどこにどのデータがあるかの把握が経験値によりけりなので、そこが難儀しそうかなと。