【EC-CUBE4】商品規格に項目を追加し、バリデーションを入れる

EC-CUBE4で商品や受注に項目を追加するには、
@EntityExtensionアノテーションを使って拡張を行います。

http://doc4.ec-cube.net/customize_entity

この際、@Eccube\FormAppendアノテーションを使うことで、
管理画面の登録フォームにも項目を追加できるのですが、
商品規格の項目に対して、ここでバリデーションを適用しようとすると、
登録しない規格の組み合わせ(つまりチェックを入れていないもの)に関しても、
アノテーションに設定したバリデーションが走ってしまいます。
必須項目にしたい時などは、これによって登録自体が
できなくなってしまうのです。

今回はそれを回避し、かつ、srcフォルダ内を直接触らなくても良い方法を紹介します。

※ 以下では、商品規格に必須項目を追加することを想定しています。

商品規格を拡張する

まずは商品や受注の項目を拡張する時と同様、
@EntityExtensionアノテーションを使って商品規格の項目を作成します。

ここでのポイントは、requiredをfalseとすることです。
trueにするとブラウザ側でバリデーションが走ってしまい、
登録できなくなってしまいます。

その後、商品規格の登録・編集ページのテンプレートに項目を追加します。
この時点で、新しい項目の登録はできるようになります。

※ データベースへのカラム追加は完了していると仮定しています。

商品規格独自のバリデーションを改修

ここからがミソなのですが、商品規格ページではチェックを入れているものと、
そうでないものとで分けてから、
バリデーションをかけるという独自の処理があります。
それが、ProductClassEditType.phpで行われていますので、
これを継承してそこに今回追加した項目のバリデーションを行います。

こうすることで、チェックを入れている規格の組み合わせだけに、
バリデーションをかけることができます。

ABOUTこの記事をかいた人

フリーランスとして働く、フルスタックエンジニア 初崎 匠のサイト。仕事のことから趣味のアニメーション制作、英語学習など、様々なことを通じて、少しでも多くの人が幸せになれるような価値を提供できるよう挑戦し続けます。