Symfony3でEntityにない変数をformに追加したいとき
今回はSymfony3でEntityにない変数をformに追加したいときどのようにすれば良いのかについてご紹介いたします。
Symfony3でEntityにない変数をformに追加したいとき
Symfony3でEntityにない変数をformに追加しようと思ったら若干ハマったので備忘録としてここに残しておきます。
普通にformに新たな変数を追加しようとして、「Form」の「Type」以下のphpファイルに変数を追加したとします。
例として、EC-Cubeの商品登録で「sale_rate」という割引率を追加するとしましょう。
「ProductClassType.php」の
->add('price02’, PriceType::class, [
])
の下に
1 2 |
->add('sale_rate', TextType::class, [ ]) |
を追加したとします。
しかしこれを実行すると、次のようなエラーが発生してしまいます。
1 |
Neither the property "sale_rate" nor one of the methods "getSaleRate()", "saleRate()", "isSaleRate()", "hasSaleRate()", "__get()" exist and have public access in class "Eccube\Entity\ProductClass". |
これを解消するにはどうすれば良いかというと、結論から言うとFormのsale_rateに次のように「’mapped’ => false,」を追加する必要があります。
1 2 3 |
->add('sale_rate', TextType::class, [ 'mapped' => false, ]) |
なぜこれが必要なのかというと、mappedがtrueになっていると自動でエンティティを参照して自動的にマッピング・変換処理を行ってしまうからです。
mappedがtrueになっているとエンティティとの整合性を確認しようとします。
Formに変数を定義したときはデフォルトでmappedがtrueになっているため、明示的にmappedをfalseにしてやる必要があります。
mappedをfalseにすることによって、エンティティを追加しなくてもFormに変数を追加することが可能となります。
終わりに
今回はSymfony3でEntityにない変数をformに追加したいときどのようにすれば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません