【EC-CUBE4】フォームのカスタマイズ

#PHP
written by みよしや

こんにちは、みよしやです。

今回は、EC-CUBEでフォームのカスタマイズをする方法について書いていこうと思います。
使用するバージョンはEC-CUBE4.1となります。

フォームクラスファイルの作成場所

そもそもデフォルトのフォームはどこで定義されているかというと、src/Eccube/Form/Typeフォルダ下のファイルに書かれています。

ここのファイルを編集(もしくはファイル追加)することでもカスタマイズは可能ですが、
src/Eccube配下はEC-CUBEのアップデート時に上書かれてしまう可能性があるためapp/Customize/Formフォルダにファイルを作成するようにしてください。

 

既存フォームのカスタマイズ方法

<?php

namespace Customize\Form\Extension;

use Symfony\Component\Form\AbstractTypeExtension;

class [フォームクラス名] extends AbstractTypeExtension
{

既存のフォームクラスをカスタマイズする場合は、
まず、app/Customize/Form/ExtensionフォルダにAbstractTypeExtensionを継承したクラスファイルを作成します。

 

public function getExtendedType()
{
     return [対象のフォームクラス名]::class;
}

次に、getExtendedTypeを定義し、どのフォームを拡張するかを決めます。
あとはbuildForm関数をオーバーライドし、追加したい項目を記述すればカスタマイズ完了です。

 

【会員登録フォーム(EntryType)にFAX番号を追加するサンプル】

<?php

namespace Customize\Form\Extension;

use Eccube\Form\Type\PhoneNumberType;
use Eccube\Form\Type\Front\EntryType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;

class EntryTypeExtension extends AbstractTypeExtension
{
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
          $builder
               ->add('fax_number', PhoneNumberType::class, [
                    'required' => true,
               ]);
     }
     public function getExtendedType()
     {
          return EntryType::class;
     }
}

 

新規フォームの作成方法

<?php

namespace Customize\Form\Type\Front;

use Symfony\Component\Form\AbstractType;

class [フォームクラス名] extends AbstractType
{

app/Customize/Form/Type/Front(管理画面の場合はAdmin)に、AbstractTypeを継承したクラスファイルを作成します。
定義する関数はデフォルトのフォームクラスと同一となります。

 

use Eccube\Form\Type\Front\[作成したフォームクラス];

$builder = $this->formFactory->createBuilder([作成したフォームクラス]::class);

あとはコントローラーで、作成したフォームクラスを読み込みcreateBuilderでそのクラスを指定することで使用できます。

 

最後に

EC-CUBEで開発をしていると、デフォルトのフォームのままでは対応できない場面が出てくると思いますので
今回の記事を参考に、フォームの追加やバリデーションのカスタマイズなどを行ってみてください。
次回は「EC-CUBEでの条件付きバリデーション実装」についての記事を検討しています。

ご覧いただきありがとうございました。