EC-CUBEでは必須項目のフォームを空欄で送信すると「入力されていません。」というエラーメッセージが表示されます。
簡単にバリデーションできる便利なEC-CUBEのフォームですが、「入力されていません。」というメッセージを変更したいことがあります。
例えば、会員登録フォームの利用規約に対するチェックボックスなど、チェックされていない時のメッセージが「入力されていません。」だと少し変ですよね。
他のフォームのメッセージは変更せず、利用規約に関してだけエラーメッセージを変更してみます。
簡単な方法(src配下修正あり)
src/Eccube/Form/Type/Front/EntryType.phpを修正
NotBlankにmessageオプションを追加します。
$form->add('user_policy_check', CheckboxType::class, [ 'required' => true, 'label' => null, 'mapped' => false, 'constraints' => [ new Assert\NotBlank(['message' => '利用規約に同意してください']),//変更 ], ]);
この1行の修正だけでメッセージが変更されます。
少し難しい方法(src配下修正なし)
app/Customize/Form/Extension/EntryTypeExtension.phpを新規作成
Customizeディレクトリ内にEntryTypeのエクステンションを作成します。次の内容でファイル自体を作成してください。
<?php namespace Customize\Form\Extension; use Eccube\Entity\Customer; use Eccube\Form\Type\Front\EntryType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Validator\Constraints as Assert; class EntryTypeExtension extends AbstractTypeExtension { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $Customer = $event->getData(); if ($Customer instanceof Customer && !$Customer->getId()) { $form = $event->getForm(); $form->add('user_policy_check', CheckboxType::class, [ 'required' => true, 'label' => null, 'mapped' => false, 'constraints' => [ new Assert\NotBlank(['message' => '利用規約に同意してください']), ], ]); } } ); } /** * {@inheritdoc} */ public function getExtendedType() { return EntryType::class; } }
.envでprod環境を指定している場合はキャッシュを削除すると反映されます。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。