EC-CUBE3の管理画面でフィールドを追加するのは大変だ。
2系で開発をしていた事もあり、その杵柄があるから~とかなり緩く考えていましたが間違い。
例として顧客に新しいフィールドを追加する為のまとめ。
更新対象ファイル
/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に登録されている事を確認。
フィールド追加に関してはそこまで難しい処理ではなさそう。むしろどこにどのデータがあるかの把握が経験値によりけりなので、そこが難儀しそうかなと。