Doctrine 2 ORM用可恶的CamelCase创建类

时间:2011-09-27 18:06:17

标签: doctrine-orm getter-setter camelcasing

我为Doctrine创建了yaml配置。当我尝试doctrine orm:generate-entities时,它会创建带有getter和getter的getter和setter的php文件。因此,is_public字段会转换为setIsPublicgetIsPublic方法。这是有益的。如何获得set_is_publicget_is_public?我可以手动编辑生成的php文件,但我不知道更改架构时会发生什么。

3 个答案:

答案 0 :(得分:3)

你可以使用choose a naming strategy Doctrine用来生成项目:

  

使用命名策略,您可以自动提供规则   生成数据库标识符,列和表名称时   没有给出表/列名称。此功能有助于减少   映射文档的详细程度,消除重复性噪声(例如:   表_)。

对于您的具体情况,我认为您正在寻找类似的内容:

$namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER);
$configuration()->setNamingStrategy($namingStrategy);

链接的主题继续向您展示如何编写自己的自定义命名策略。

如果你正在使用Symfony,那就是even easier(就像大多数事情都与Symfony有关,但这只是我的观点)来自config.yml

doctrine:
    orm:
        naming_strategy: doctrine.orm.naming_strategy.underscore

答案 1 :(得分:1)

Symfony's coding standards鼓励Symfony用户使用 camelCase

  

命名约定

     

使用camelCase,而不是下划线,变量,   函数和方法名称,参数

答案 2 :(得分:0)

个人建议 - 不要通过doctrine orm生成实体:generate-entities。
使用纯PHP创建类。为什么?
Orm在privates上使用反射与数据库进行通信。你不需要生成setter和getters。我建议您使用工厂或构造函数等设计模式来实现您的目标。装饰者也应该工作正常。

<?php

class MyClass
{
    private $id;
    private $name;

    public function __construct(int $id, string $name)
    {
        $this->id = $id;
        $this->name = $name;
    }
}


$ camelCase不仅是Symfony对代码标准的推荐。它基于PSR2。我非常推荐使用PSR2,代码变得干净和标准化。
标准ORM命名策略是 $ camelCase 私有var到 snake_case 列名。如果您想要更改它,请考虑:other naming stategies