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環境を指定している場合はキャッシュを削除すると反映されます。