【EC-CUBE4】フォームのカスタマイズ
こんにちは、みよしやです。
今回は、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での条件付きバリデーション実装」についての記事を検討しています。
ご覧いただきありがとうございました。