概要
EC-CUBEのSymfony開発ブランチではEC-CUBE3.0系にはなかったカスタマイズディレクトリによるカスタマイズ方法が導入されています。
本記事ではカスタマイズ例として既存フォームへ新規項目を追加するまでの流れを示します。
ソースコードは以下でも確認いただけます。
https://github.com/okazy/ec-cube/tree/demo
新規画面追加
新規会員登録画面へ趣味のフォームを追加します。
詳しい内容は公式ドキュメントを参照してください。
Step1: /app/Customize/Entity 配下に CustomerTrait トレイトを作成します。
/app/Customize/Entity/CustomerTrait.php
<?php
namespace Customize\Entity;
trait CustomerTrait
{
}
Step2: @EntityExtension アノテーションを追加して拡張するエンティティを指定します。
/app/Customize/Entity/CustomerTrait.php
<?php
namespace Customize\Entity;
use Eccube\Annotation\EntityExtension;
/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait
{
}
Step3: $hobby 変数を追加します。
/app/Customize/Entity/CustomerTrait.php
<?php
namespace Customize\Entity;
use Eccube\Annotation\EntityExtension;
/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait
{
    public $hobby;
}
Step4: @ORM\Column アノテーションでデータベースの設定を追加します。
/app/Customize/Entity/CustomerTrait.php
<?php
namespace Customize\Entity;
use Eccube\Annotation\EntityExtension;
use Doctrine\ORM\Mapping as ORM;
/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait
{
    /**
     * @ORM\Column(type="string", nullable=true)
     */
    public $hobby;
}
Step4: コマンドラインからプロキシファイルを作成します。
/app/proxy/entity ディレクトリに Customer.php が作成されます。
bin/console eccube:generate:proxies
Step5: コマンドラインからDBのスキーマを変更します。
dtb_customer テーブルに hobby カラムが追加されます。
実行されるSQLの確認。
bin/console doctrine:schema:update --dump-sql
問題がなければ実行
bin/console doctrine:schema:update --dump-sql --force
Step6: @FormAppend アノテーションでフォームの設定を追加します。
/app/Customize/Entity/CustomerTrait.php
<?php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
use Eccube\Annotation\FormAppend;
/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait
{
    /**
     * @ORM\Column(type="string", nullable=true)
     * @FormAppend(
     *     auto_render=true,
     *     form_theme="Form/hobby.twig"
     * )
     */
    public $hobby;
}
Step7: /app/template 配下にテンプレートファイルを追加します。
/app/template/default/Form/hobby.twig
{%- extends 'Form/form_div_layout.twig' -%}
{%- block _entry_hobby_row -%}
    <dl>
        <dt>
            {{ form_label(form, '趣味', {'label_attr': {'class': 'ec-label'}}) }}
        </dt>
        <dd>
            {# 確認画面での表示 #}
            {% if type is defined and type == 'hidden' %}
                {{ form.vars.data }}
                {{ form_widget(form, {type: 'hidden'}) }}
            {% else %}
                {# 入力画面での表示 #}
                <div class="ec-select{{ has_errors(form) ? ' error' }}">
                    {{ form_widget(form) }}
                    {{ form_errors(form) }}
                </div>
            {% endif %}
        </dd>
    </dl>
{%- endblock _entry_hobby_row -%}
画面を更新して趣味が登録できたら成功です!
