5

我正在使用 Symfony2 并希望通过运行为实体生成 getter 和 setter:

$ php app/console doctrine:generate:entities TestBundle

在此处输入图像描述

控制台向我返回以下消息:

[RuntimeException] 找不到“TestBundle”的基本路径(路径:“C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle”,目的地:“C:/xampp/htdocs/ProjectX/src/Namespace/TestBundle ”)。

Bundle 存在于以下位置: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

我的bundle目录中的小写/大写问题引起了这个问题。在 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

Bundle php 文件的名称从TestBundle.php更改为NamespaceTestBundle.php路径错误:C:/xampp/htdocs/ProjectX/src/Namespace/TestBundle/

于 2013-11-05T07:56:22.523 回答
0

John Pancoast 的 回答是正确的。

只是添加其他内容以防其他人达到此目的。我遇到了导致相同错误的问题,但这是由于我的实体生活在使用 PSR-4 的代码库中。在做任何代码生成时,Doctrine 不支持 PSR-4。它与它们如何将类命名空间映射到文件系统路径以及 PSR-4 如何允许不直接映射到文件系统的类/命名空间路径有关。

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

明确说明解决错误消息所需的内容;编辑您的捆绑包composer.json文件,并更改捆绑包的文件夹结构。

composer.json改为:_ psr-4_psr-0

"autoload": {
    "psr-4": { "Acme\\Bundle\\AwesomeBundle\\": "" }
},

至:

"autoload": {
    "psr-0": { "Acme\\Bundle\\AwesomeBundle\\": "" }
},

从以下位置更改捆绑包的文件夹结构:

vendor
 +--acme
     +--awsome-bundle
         |--Controller
         |--Entity

至:

vendor
 +--acme
     +--awsome-bundle
         +--Acme
             +--Bundle
                 +--AwsomeBundle
                     |--Controller
                     |--Entity

以下命令将不再引发异常:

bin/console doctrine:generate:entities AwesomeBundle
于 2016-08-16T08:24:03.100 回答