【问题标题】:Generate Doctrine entity getters/setters for a reusable Symfony bundle为可重用的 Symfony 包生成 Doctrine 实体 getter/setter
【发布时间】:2015-03-22 12:05:08
【问题描述】:

我在任何 Symfony 安装之外单独创建一个 Symfony 包,用于我的多个项目。我是 Symfony 中这种类型的工作流的新手,我对如何最好地处理它有点困惑。

我知道我可以编写单元测试来测试包的功能方面,但我还绘制了大约 25 个 Doctrine 实体,我宁愿不必手动为其定义 getter/setter。

我以为我可以安装 Composer 依赖项,然后使用 vendor/bin/doctrine 生成它们,但 Doctrine 抛出错误,说我应该定义一个 config-cli.php 文件,该文件旨在实例化实体管理器,这需要连接。

这很好,但鉴于没有实际的数据库(理论上),我不想定义连接。我只想生成实体并使用 PHPUnit 测试我的服务,然后稍后将包加载到实际的 Symfony 安装中。

我做错了吗?一篇解释工作流程的文章会很有帮助,但我没有通过 Google 找到任何东西。

【问题讨论】:

  • 如果您使用 IDE,最好让 IDE 生成 getter 和 setter,即使在 Symfony 应用程序中也是如此。
  • 我不使用 IDE,只使用 Sublime Text 3。您知道任何支持解析 Doctrine 注释以生成 getter 和 setter 的 IDE 吗?

标签: php symfony doctrine-orm phpunit


【解决方案1】:

getter 和 setter 的生成是 IDE 的一个常见特性。您可以使用免费的 NetBeans IDE,而有些人可能更愿意为 PhpStorm 花钱。两种 IDE 都可以为您生成 getter 和 setter。

【讨论】:

  • 这些是从Doctrine annotations 生成的,而不是标准的文档块。我不知道有任何支持该功能的 IDE?
【解决方案2】:

因此,如果没有实体管理器的实例,似乎无法运行 generate:* 命令,甚至不能生成 getter/setter。不幸的是,这意味着需要连接,这是我在这个开发阶段试图避免的。

我一直在查看一些更流行的 Symfony 捆绑包,试图弄清楚它们是如何处理它的。据我所知,模式是在Model/ 命名空间中使用标准DocBlocks 为属性定义一个基本的、非供应商特定的模型(任何ol'生成器都可以用来解析和生成getter/setter)然后在 Entity/ 命名空间内的特定于 Doctrine 的实体中扩展类。

由于Entity\Foo 扩展Model\Foo,类型提示仍然有效,您只需要覆盖属性注释和任何需要Doctrine 特定代码的方法。

虽然最初的工作量更大(忽略生成过程),但我实际上喜欢这种方法。它不仅将重复的 getter/setter 样板代码与 Doctrine 映射分开,而且实际上通过将模型与 Doctrine 完全解耦来遵循最佳实践。

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    相关资源
    最近更新 更多