无法找到捆绑的基本路径

时间:2013-11-05 07:44:52

标签: php symfony doctrine-orm entities

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

$ php app/console doctrine:generate:entities TestBundle

enter image description here

控制台返回以下消息:

  

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

Bundle存在于此位置:C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle

怎么了?

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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无法根据命名空间重新创建类路径:这意味着您的命名空间或文件夹错误(检查大小写)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

John Pancoast's answer是正确的。

  

添加其他内容以防其他人达到此目的。我有一个问题导致相同的错误,但这是由于我的实体生活在使用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