EC-CUBE3で開発しているとき、新規Entityを作成し別のEntity(Customer)のyamlから参照しようとするとのMappingExceptionが起こってしまいました。
MappingException in MappingException.php line 740:
原因が分かったのは1時間後。class_exists(“Entityのクラス名”)がfalseを返している・・・。
ルートにあるautoload.php内をのぞいてみるとこんな記述が。
// autoloader cache if (extension_loaded('apc') && ini_get('apc.enabled')) { $apcLoader = new Symfony\Component\ClassLoader\ApcClassLoader(sha1(__FILE__), $loader); $apcLoader->register(); $loader->unregister(); } elseif (extension_loaded('wincache') && ini_get('wincache.fcenabled')) { $winCacheLoader = new Symfony\Component\ClassLoader\WinCacheClassLoader(sha1(__FILE__), $loader); $winCacheLoader->register(); $loader->unregister(); }
つまりオートローダーごとapcのキャッシュに捕まっていたわけですね。
この部分を対処して解決しました。
このあたりのコード変更したら毎回apcのキャッシュクリアしたほうがいいのでしょうか?
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。