EC-CUBE3のデータコミットタイミング
ちゃんとコアプログラムを読んでいない自分が悪いが、EC-CUBE標準の使い方をした場合のデータベースのコミットはページが遷移した後になる。
何が言いたいかと言うと、コントローラ上で処理が完了してリダイレクトの前に一旦ブレイクポイントを置いてデータベースを確認してもまだコミットされていない。
例として以下の会員登録のコントローラで説明する
/src/Eccube/Controller/EntryController.php
case 'complete': log_info('会員登録開始'); $Customer ->setSalt( $app['eccube.repository.customer']->createSalt(5) ) ->setPassword( $app['eccube.repository.customer']->encryptPassword($app, $Customer) ) ->setSecretKey( $app['eccube.repository.customer']->getUniqueSecretKey($app) ); $CustomerAddress = new \Eccube\Entity\CustomerAddress(); $CustomerAddress ->setFromCustomer($Customer); $app['orm.em']->persist($Customer); $app['orm.em']->persist($CustomerAddress); $app['orm.em']->flush(); log_info('会員登録完了');
会員登録完了ページにてログとして会員登録開始と会員登録完了と言うログが書き込まれている。
ただ、このログでブレイクしてデータベースに会員情報は渡っていない。
log_info('本会員登録画面へリダイレクト');
return $app->redirect($activateUrl);
リダイレクトが終わった段階でデータが反映されるので、コミット自体はされておらず登録したデータからアレコレってのが出来ない。
基本的に現状あるEC-CUBEの骨子を変える事自体があまり良い事ではないからやりたくないが、やる場合は事後が基本となりそうなのでメモ。