供应商中的学说生成

Doctrine crud generation in vendor

我正在尝试使用 Symfony2 app/console 命令工具通过 doctrine2 命令生成 CRUD。 (app/console doctrine:generate:crud)

问题来了: 我想在 vendors 中生成它(是的,我们在启动时直接在 vendors 中开发了一些包)。 当我执行命令并给出 实体快捷方式名称 时,它 returns 给我一个错误:

  [Doctrine\ORM\ORMException]
  Unknown Entity namespace alias 'ExampleTemplateBundle'.

(是的,实体存在且实体快捷方式名称很好)

有没有办法在使用 Symfony2 和 Doctrine2 的供应商中生成 CRUD?

您不能修改供应商。 尝试继承它并为您自己的实体创建一个 crud。

我找到了解决办法!

我已经找到错误并更正了问题。它位于 doctrine/doctrine-bundle(对我来说 v1.2.0)。

使进程失败的东西位于文件 DoctrineBundle/Mapping/MetadataFactory.php

编辑: 对于使用 doctrine-bundle v1.3.0 及以上版本的人,该文件已更改名称。现在是 DisconnectedMetadataFactory.php

失败的代码如下:

    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;
}

所以我所做的是,我分叉了回购协议,用这个替换了代码:

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

    return $destination;
}

并更新了我的 composer.json 以使用我的 doctrine/doctrine-bundle 的分叉版本。 现在它就像一个魅力。