当前位置: 首页 > 知识库问答 >
问题:

不推荐:不支持条令\ORM\Mapping\UnderlineNamengStrategy而不知道其编号

江瀚昂
2023-03-14

我使用的是Symfony 4.3.8,我找不到任何关于这些弃用的信息:

不推荐用户:创建条令\ORM\Mapping\UnderlineNamengStrategy而不知道其编号已不推荐,将在条令ORM 3.0中删除。

不建议在不知道编号的情况下创建条令\ORM\Mapping\下划线策略,该策略将在条令ORM 3.0中删除。

我在stackTrace中搜索并发现了这个:

class UnderscoreNamingStrategy implements NamingStrategy
{
private const DEFAULT_PATTERN      = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';

/**
 * Underscore naming strategy construct.
 *
 * @param int $case CASE_LOWER | CASE_UPPER
 */
public function __construct($case = CASE_LOWER, bool $numberAware = false)
{
    if (! $numberAware) {
        @trigger_error(
            'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
            E_USER_DEPRECATED
        );
    }

    $this->case    = $case;
    $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
}

在这个类中,构造函数总是在没有参数的情况下被调用,所以$NumberAware总是false。

这个类是在Symfony依赖项注入自动生成的html" target="_blank">文件中调用的,所以我不能“编辑”它。。。

我想也许是在doctrine.yaml:

doctrine:
orm:
    auto_generate_proxy_classes: true
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        App:
            is_bundle: false
            type: annotation
            dir: '%kernel.project_dir%/src/Entity'
            prefix: 'App\Entity'
            alias: App

但我没有找到任何选项,让号码知道:(

共有2个答案

莘羽
2023-03-14

对于那些使用symfony4.3但仍希望消除此警告的用户,可以在service.yaml中添加新的服务定义

    custom_doctrine_orm_naming_strategy_underscore:
    class: Doctrine\ORM\Mapping\UnderscoreNamingStrategy
    arguments:
        - 0
        - true

并更改doctor.yaml的配置,如下所示:

orm:
    naming_strategy: custom_doctrine_orm_naming_strategy_underscore

在直接提交此更改之前,我建议您验证将true传递到Doctrine\ORM\Mapping\下划线策略不会影响代码的预期行为。

// class UnderscoreNamingStrategy
/**
 * Underscore naming strategy construct.
 *
 * @param int $case CASE_LOWER | CASE_UPPER
 */
public function __construct($case = CASE_LOWER, bool $numberAware = false)
{
    if (! $numberAware) {
        @trigger_error(
            'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
            E_USER_DEPRECATED
        );
    }

    $this->case    = $case;
    $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
}

快速提示:

true传递给指挥官将使该类使用NUMBER\u-AWARE\u模式,而不是DEFAULT\u模式

private const DEFAULT_PATTERN      = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';

萧心远
2023-03-14

在大多数情况下,我只是用评论来回答这类问题,但我怀疑其他开发人员可能会遇到这个问题。我翻了一下,找不到任何关于这个问题的明确文档。也许是因为DoctrineBundle由Doctrine人员控制,而不是由Symfony开发人员控制。或者我只是一个糟糕的搜索者。

无论如何,在4.3到4.4之间,下划线命名策略的服务名称已更改。

# doctrine.yaml
orm:
  # 4.3
  naming_strategy: doctrine.orm.naming_strategy.underscore
  # 4.4
  naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware

并添加了一条已弃用的消息来警告开发人员更改名称。如果信息更明确一点就好了,但是哦,好吧。因此,如果您正在将现有应用升级到4.4及更高版本,那么您可能需要手动编辑doctrine.yaml文件,以消除折旧消息。

有关做出更改原因的更多信息(谢谢@janh):https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-数字未知DoctrineOrmMappingUnderlineName策略https://github.com/doctrine/orm/issues/7855

仍然不清楚为什么“他们”选择这样做,但是哦,好吧。您可能希望运行“bin/控制台原则:模式:更新-转储-sql”,看看这是否会影响您的数据库列名,并相应地进行调整。这些变化已经发布了几周,似乎没有多少人对这些变化感到愤怒,所以我想大多数列名都没有嵌入数字。至少到目前为止。

 类似资料:
  • 问题内容: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度? 再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 问题答案: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度?再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 目前尚不清楚您所处的状态。如果您知道执行时的数组长度而不是编译时的数组长度,那就可以了: 您可

  • 在GitHub站点上有一个链接。。。 https://help.github.com/articles/generating-ssh-keys ... 它说。。。 如果您决定不使用推荐的HTTPS方法,我们可以使用SSH密钥在您的计算机和GitHub之间建立安全连接。下面的步骤将引导您生成SSH密钥,然后将公钥添加到GitHub帐户。 为什么HTTPS是推荐的方法?SSH方法中是否存在某种安全缺陷

  • 原则上,我的应用程序不知道屏幕的纵横比(Android应用程序也应该如此)。现在,推荐的做法是手动添加 进入清单,因为智能手机屏幕的宽高比高于默认支持的1.86的趋势。我的问题是,与其设置一个硬编码的比率(如2.1),有没有更好的方法告诉Android,我不在乎最大宽高比是多少? 如果否,是否可以设置任意高的值,例如3.1甚至5.1?这样做安全吗?我说的不是奇怪的屏幕尺寸,而是未来的主流屏幕和未来

  • 问题内容: 我收到此警告,但是该程序仍然可以正常运行。 MySQL代码向我显示了一条PHP消息: 不推荐使用:mysql_connect():不推荐使用mysql扩展,以后将被删除:在第2行的C:\ xampp \ htdocs \ task \ media \ new \ connect.inc.php中使用mysqli或PDO代替 我的页面是 这是什么意思,我该如何消除该消息? 问题答案: 有

  • 问题内容: 我正在尝试使用和进行单元测试。 当我不包含注释时,测试将失败。但 不推荐使用MockitoJUnitRunner类型 我正在使用Mockito 2.6.9。我应该怎么做? 问题答案: 现在确实已弃用,应该改为使用。如您所见,仅软件包名称已更改,该类的简单名称仍为 。 摘录自javadoc : 移至,该课程将在Mockito 3中删除