5

私は Symfony2 を使用しており、次を実行してエンティティのゲッターとセッターを生成したいと考えています。

$ php app/console doctrine:generate:entities TestBundle

ここに画像の説明を入力

コンソールから次のメッセージが返されます。

[RuntimeException] 「TestBundle」のベース パスが見つかりません (パス:「C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle」、宛先:「C:/xampp/htdocs/ProjectX/src/Namespace/TestBundle」 」)。

バンドルは次の場所にあります。C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle

どうしたの?

4

4 に答える 4

5

他の人がこれに到達した場合に備えて、何かを追加するだけです。同じエラーを引き起こす問題がありましたが、それは私のエンティティが PSR-4 を使用するコードベースに住んでいたことが原因でした。コード生成で何かを行う場合、Doctrine は PSR-4 をサポートしません。クラスの名前空間をファイルシステムのパスにマップする方法と、PSR-4 がファイルシステムに直接マップしないクラス/名前空間のパスを許可する方法に関係しています。

https://github.com/doctrine/DoctrineBundle/issues/282

于 2014-09-17T04:48:37.367 に答える
2

この問題は、バンドル ディレクトリの小文字 / 大文字の問題が原因で発生しました。Windows では問題にならないはずですが、php 関数 str_replace では大文字と小文字が区別され、エラーが発生します。

//Doctrine\Bundle\DoctrineBundle\Mapping\MetadataFactory

private function getBasePathForClass($name, $namespace, $path)
    {
        $namespace = str_replace('\\', '/', $namespace);
        $search = str_replace('\\', '/', $path);
        $destination = str_replace('/' . $namespace, '', $search, $c);

        if ($c != 1) {
            throw new \RuntimeException(sprintf('Can\'t find base path for "%s" (path: "%s", destination: "%s").', $name, $path, $destination));
        }

        return $destination;
    }

Doctrine は名前空間に基づいてクラス パスを再作成できません: つまり、名前空間またはフォルダーが間違っていることを意味します (ケースを確認してください)。

于 2014-02-17T13:51:06.880 に答える
0

バンドル php ファイルの名前が間違っています。パスでTestBundle.phpからNamespaceTestBundle.phpに変更します: C:/xampp/htdocs/ProjectX/src/Namespace/TestBundle/

于 2013-11-05T07:56:22.523 に答える