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を使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー