EC-CUBE4.1で「The “XXX” service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.」エラーに対応する

EC-CUBE4.0.xの環境をEC-CUBE4.1.xにアップデートするときに自前のプラグインが掲題のエラーを吐いていました。

プラグインを有効化する操作を行なった際に出たエラーで、引数で渡したページが存在するかしないかをboolで返す関数だったのですが、データを取得して何かをする処理をPluginManager.phpに書いている場合に起こりうるんじゃないかなと思います。

最初はこんな感じでコードを書いていたのですが・・・

    private function urlExists(ContainerInterface $container, string $url) {
        $pageRepository = $container->get(PageRepository::class);
        $found          = $pageRepository->findOneBy(["url" => $url]);
        return !is_null($found);
    }

下記実装に直したところエラーが解消されました。

    private function urlExists(ContainerInterface $container, string $url) {
        $entityManager  = $container->get('doctrine')->getManager();

        $pageRepository = $entityManager->getRepository(Page::class);
        $found          = $pageRepository->findOneBy(["url" => $url]);
        return !is_null($found);
    }

getRepositoryに渡す引数は取得したいRepositoryの対になるEntityクラスです。

この記事を書いた人

えっくん

ロードスターに乗っています。最近またブログを書きはじめました。
この名前を名乗るようになって15年が経ちWebの仕事をはじめて10年が経ちました。とほほ・・・。