【问题标题】:Doctrine crud generation in vendor供应商中的教条生成
【发布时间】:2015-03-03 14:46:32
【问题描述】:

我正在尝试使用 Symfony2 app/console 命令工具来生成带有教义 2 命令的 CRUD。 (app/console doctrine:generate:crud)

这是问题: 我想在 vendors 中生成它(是的,我们在初创公司的供应商中直接开发了一些捆绑包)。 当我执行命令并给出 Entity Shortcut Name 时,它返回一个错误:

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

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

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

【问题讨论】:

  • ExampleTemplateBundle 是否在 AppKernel 中注册?为什么要在供应商目录中开发?它应该被版本控制忽略。
  • 是的,它已注册。我们在供应商中进行开发,因为每个供应商都有自己的 git repo,并且更易于管理。
  • 我认为一种方法是创建自己的命令来扩展 doc:gen:crud 命令...
  • 听起来捆绑包有一些配置错误。也许它没有加载它的配置?或扩展类?目录名称中的一个小错字可能会导致某些文件位于意外位置并且无法加载。我怀疑使用 vendor-dir 是一个问题。这是非常规的,但不应该成为问题。

标签: php symfony doctrine-orm crud


【解决方案1】:

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

【讨论】:

  • 如果您是 vendor-dir 中加载的 repo 的“所有者”,并且您加载了 dev-version(它只是一个分支),您可以直接在 vendor 目录中修改代码.提交时只是有点麻烦。 (您需要单独提交并推送您的供应商目录中的代码)。在解决问题或向库代码或通用包中添加功能时会产生奇迹。
【解决方案2】:

我找到了解决办法!

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

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

编辑: 对于使用教义捆绑包 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;
}

所以我所做的是,我分叉了 repo,用这个替换了代码:

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 的分叉版本。 现在它就像一个魅力。

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 2020-07-30
    相关资源
    最近更新 更多