郵便番号のフォームにハイフンを入力可能にしたい場合があります。EC-CUBE4ではEC-CUBE3以前とは異なり郵便番号のフォームが2つに分かれなくなり、3桁と4桁を区切るハイフンが入力できない仕様となっております。

数字だけの郵便番号に違和感を感じて今までと同じ形式で使用したいというご要望をお伺いすることがあります。

実際にはフォームを2つに分けたいというご要望も多いと思いますが(郵便番号ではそれも可能なのですが、電話番号もとなるとなかなか手が掛かるためあまり行いません)
今回は郵便番号フォームにハイフンを入力できるようにする方法をご紹介します。

やらないといけないことは次の2つです。
1. バリデーションの修正
2. ハイフン削除の処理を停止する

バリデーションの修正

src/Eccube/Form/Type/PostalType.phpを修正します。
configureOptionsメソッド内の下記コードを修正してください。

(修正前)

$constraints[] = new Assert\Length([
'max' => $eccubeConfig['eccube_postal_code'],
]);

(修正後)

$constraints[] = new Assert\Regex([
    'pattern' => '/^\d{3}-\d{4}$/',
    'message' => '数字とハイフンで入力してください',
]);

この場合、3桁と4桁の間に必ずハイフンが必要となります。
任意にしたい場合は’/^\d{3}-?\d{4}$/’としてください。

ハイフン削除の処理を停止する

src/Eccube/Form/Type/PostalType.phpを修正します。
buildFormメソッド内の下記コードを削除またはコメントアウトしてください。

$builder->addEventSubscriber(new \Eccube\Form\EventListener\TruncateHyphenListener());

修正結果

郵便番号ハイフン

以上により、郵便番号にハイフンを入力することが可能です。
これだけの修正なのでプラグインとして作成てクラウド版で使用することも可能です。