EC-CUBE3 セッション利用時に発生した問題について

セッションを用いた機能を作成していたのですが、ある条件下でerrorが発生して躓いてしまったので、その条件と解決方法を記載したいと思います。

検索条件を保持するため、セッションを用いたところ、「Entities passed to the choice field must be managed」というエラーメッセージが表示されました。

調べたところ、セッションに格納したデータにエンティティが含まれる場合、それをそのままフォームにセットしようとするとerrorになるみたいです。

 

// 誤
$hoge = $session->get('hoge');
$form->setData($hoge);

// 正
$hoge = $session->get('hoge');
$hoge = $app['eccube.repository.hoge']->findOneById($hoge->getId());
$form->setData($hoge);

 

解決策は、セッションのデータを直接フォームにセットせず、一度findByメソッドを用いてhogeエンティティを取り出す必要があるようです。

これで無事解決しました!

EC-CUBE3のソースを読むと、セッションが利用されている部分で同じような方法で解決していたので、そんなに時間がかかるような問題でもなかったですね。

まだまだ力不足と実感しつつ精進あるのみです。

以上、記念すべき第一回目のブログを終わりたいと思います。

 

P.S 昨日当社ホームページがリニューアルしました。

とてもおしゃれなサイトになりましたね!