【问题标题】:How to address the bundle in php app/console generate:doctrine:crud如何解决 php app/console generate:doctrine:crud 中的捆绑包
【发布时间】:2012-08-22 03:00:23
【问题描述】:

在我的 symfony 2 项目中,我有一个包

src/Cinergy/Bundle/PeopleServiceBundle

现在我想基于一个学说实体生成一个 CRUD 控制器,但我总是无法为实体参数输入正确的字符串。

我尝试过这样的事情:

php app/console generate:doctrine:crud --entity=Cinergy/Bundle/PeopleServiceBundle:Group

或

php app/console generate:doctrine:crud --entity=@PeopleServiceBundle:Group

它们都返回错误,例如:

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

--entity 参数的正确语法是什么?还是毕竟缺少了什么?

这是目录结构现在的样子:

src/Cinergy/Bundle/PeopleServiceBundle/
├── Controller
│   ├── GroupController.php
│   └── PersonController.php
├── DependencyInjection
│   ├── Configuration.php
│   └── PeopleServiceExtension.php
├── PeopleServiceBundle.php
├── Resources
│   ├── config
│   │   ├── routing.yml
│   │   └── services.yml
│   ├── doc
│   │   └── index.rst
│   ├── public
│   │   ├── css
│   │   ├── images
│   │   └── js
│   ├── translations
│   │   └── messages.fr.xliff
│   └── views
│       └── Default
│           └── index.html.twig
└── Tests
    └── Controller
        ├── GroupControllerTest.php
        └── PersonControllerTest.php

【问题讨论】:

    标签: symfony doctrine crud


    【解决方案1】:

    毕竟,我必须先创建实体,然后才能为其创建 CRUD 控制器。当然,这是有道理的。不幸的是,Sensio Generator Bundle documentation 确实以相反的顺序列出了将我推向错误方向的操作。

    这表示顺序正确

    1. Generating a New Bundle Skeleton
    2. Generating a New Doctrine Entity Stub
    3. Generating a CRUD Controller Based on a Doctrine Entity

    【讨论】:

      【解决方案2】:

      首先您需要将您的捆绑包注册到您的AppKernel。

      然后只需运行以下命令。
      不要将@ 放在包名之前

      php app/console generate:doctrine:crud --entity=PeopleServiceBundle:Group
      

      更多关于generating a CRUD controller based on a Doctrine entity。

      【讨论】:

      • 这会返回相同的错误消息:[Doctrine\ORM\ORMException] Unknown Entity namespace alias 'PeopleServiceBundle'。
      【解决方案3】:

      根据 symfony 文档,您必须使用“作为快捷符号给出的实体名称,其中包含实体所在的包名称和实体名称”,所以它应该类似于

      --entity=CinergyPeopleServiceBundle:Group
      

      【讨论】:

      • 这将返回 [Doctrine\ORM\ORMException] 未知实体命名空间别名 'CinergyPeopleServiceBundle'。
      • 捆绑包的名称是什么? src/Cinergy/Bundle/PeopleServiceBundle 的文件是怎么命名的?
      • 我在问题中添加了当前目录树。
      【解决方案4】:

      如果您有多个 Bundle 并想使用不同的数据库连接,只需通过添加配置和参数来更新您的 config.yml 和 parameters.yml。

      这将解决 CRUD 生成的问题。

      【讨论】:

        【解决方案5】:

        我搜索了几个小时,直到我发现在我的 app/config/config.yml 中的教义.orm 中我删除了导致问题的auto_mapping: true。这可能对其他人有用:)

        【讨论】:

        • 当然不要错过运行 app/console 学说:schema:update --force
        【解决方案6】:

        如果它仍然与某人相关:) 伙计们,这是因为 DoctrineBundle DoctrineExtension 根据所有已注册的捆绑包编译有效别名列表,其中包含“实体”(或其他配置的)文件夹。

        所以为了使用doctrine:generate:crud或者generate:doctrine:crud, 你必须在你的包中只创建文件夹实体,而不需要先创建实体(如命令所说 - 这是真的)。​​

        因此,如果您的捆绑包中已经有一些实体,它就会起作用, 或者如果你的包中只有空的实体文件夹。

        【讨论】:

          猜你喜欢
          • 2011-01-19
          • 2011-03-14
          • 1970-01-01
          • 2018-05-09
          • 2016-12-08
          • 2016-01-26
          • 2019-11-09
          • 1970-01-01
          • 2015-08-22
          相关资源
          最近更新 更多