EC-CUBE4で商品に項目を追加するには、
@EntityExtensionアノテーションを使って拡張を行う。
http://doc4.ec-cube.net/customize_entity
この時、@Eccube\FormAppendアノテーションを使うことで、
管理画面の登録フォームにも項目を追加できるのだが、
ここで商品規格の項目に対して、バリデーションを適用しようとすると、
登録しない規格の組み合わせ(つまりチェックを入れていないもの)に関しても、
アノテーションに設定したバリデーションが走ってしまう。
必須項目にしたい時などは、これによって登録自体ができなくなってしまう。
そういった場合にどうするか。
商品規格を拡張する
まずは商品の項目を拡張する時と同様、
@EntityExtensionアノテーションを使って商品規格の項目を作成。
ポイントは、requiredをfalseとすること。
trueにするとブラウザ側でバリデーションが走ってしまい、登録できなくなってしまう。
その後、商品規格の登録・編集ページのテンプレートに項目を追加。
この時点で、新しい項目の登録はできるようになる。
※ データベースへのカラム追加は完了していると仮定。
商品規格独自のバリデーションを改修
ここからがポイント、商品規格ページではチェックを入れているものと、入れていないものとで、
分けてからバリデーションをかけるという独自の処理がある。
それが、ProductClassEditType.phpで行われているので、
これを継承してそこに今回追加した項目のバリデーションを行う。
こうすることで、チェックを入れている規格の組み合わせだけに、
バリデーションをかけることができる。