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, [
])

の下に

を追加したとします。

しかしこれを実行すると、次のようなエラーが発生してしまいます。

これを解消するにはどうすれば良いかというと、結論から言うとFormのsale_rateに次のように「’mapped’ => false,」を追加する必要があります。

なぜこれが必要なのかというと、mappedがtrueになっていると自動でエンティティを参照して自動的にマッピング・変換処理を行ってしまうからです。
mappedがtrueになっているとエンティティとの整合性を確認しようとします。

Formに変数を定義したときはデフォルトでmappedがtrueになっているため、明示的にmappedをfalseにしてやる必要があります。

mappedをfalseにすることによって、エンティティを追加しなくてもFormに変数を追加することが可能となります。

終わりに

今回はSymfony3でEntityにない変数をformに追加したいときどのようにすれば良いのかについてご紹介いたしました。

最後までお読みいただきありがとうございます。
ブログやTwitterでのシェアOKです。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






Symfony

Posted by ちこ