【问题标题】:Cant find base path for bundle找不到捆绑包的基本路径
【发布时间】:2016-08-16 16:43:11
【问题描述】:

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

$ php app/console doctrine:generate:entities TestBundle

控制台返回以下消息:

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

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

怎么了?

【问题讨论】:

    标签: php symfony doctrine-orm entities


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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 无法根据命名空间重新创建类路径:所以这意味着您的命名空间或文件夹错误(检查案例)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 重命名后出现此错误:'Fatal error: Class 'Namespace\TestBundle\TestBundle' not found in C:\xampp\htdocs\ProjectX\app\AppKernel.php on line 21'跨度>
        • @David 如果你是 Symfony2 的新手,你最好删除和重新生成包,而不是寻找无效的命名空间
        【解决方案4】:

        John Pancoast'sanswer 是正确的。

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

        【讨论】:

          猜你喜欢
          • 2011-01-06
          • 2016-06-13
          • 2016-05-02
          • 2014-03-21
          • 1970-01-01
          • 2018-10-20
          • 1970-01-01
          • 2021-10-31
          相关资源
          最近更新 更多