弃用:Doctrine\ORM\Mapping\UnderscoreNamingStrategy 没有让它知道数字已被弃用
Deprecation: Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated
我正在使用 Symfony 4.3.8,但我找不到任何关于这些弃用的信息:
User Deprecated: Creating Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.
Creating Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.
我在堆栈跟踪中搜索并找到了这个:
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;
}
在这个 class 中,构造函数总是在没有参数的情况下被调用,所以 $numberAware 总是 false。
这个 class 是在 Symfony 依赖注入自动生成的文件中调用的,所以我不能 "edit" 它 ...
我想也许是在 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
但我还没有找到任何允许号码感知的选项:(
在大多数情况下,我只会通过评论来回答这类问题,但我怀疑其他开发人员可能 运行 会处理此问题。我四处寻找了一下,找不到关于此问题的任何明确文档。也许是因为 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-number-unaware-doctrineormmappingunderscorenamingstrategy
https://github.com/doctrine/orm/issues/7855
仍然不太清楚为什么“他们”选择以这种方式做事,但是哦,好吧。
您可能想要 运行 "bin/console doctrine:schema:update --dump-sql" 只是为了查看这是否会影响您的数据库列名称并相应地进行调整。这些更改已经发布了几个星期,而且似乎没有多少人对更改感到愤怒,所以我猜大多数列名都没有嵌入数字。至少到目前为止。
对于那些使用 symfony4.3 并且仍然希望此警告消失的人,您可以在 service.yaml
中添加新的服务定义
custom_doctrine_orm_naming_strategy_underscore:
class: Doctrine\ORM\Mapping\UnderscoreNamingStrategy
arguments:
- 0
- true
并像这样更改 doctrine.yaml 的配置:
orm:
naming_strategy: custom_doctrine_orm_naming_strategy_underscore
在直接提交此更改之前,我建议您验证将 true
传递给 Doctrine\ORM\Mapping\UnderscoreNamingStrategy
不会影响代码的预期行为。
// 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
传递给 c'tor 将使 class 使用 NUMBER_AWARE_PATTERN
而不是 DEFAULT_PATTERN
private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';
我正在使用 Symfony 4.3.8,但我找不到任何关于这些弃用的信息:
User Deprecated: Creating Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.
Creating Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.
我在堆栈跟踪中搜索并找到了这个:
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;
}
在这个 class 中,构造函数总是在没有参数的情况下被调用,所以 $numberAware 总是 false。
这个 class 是在 Symfony 依赖注入自动生成的文件中调用的,所以我不能 "edit" 它 ...
我想也许是在 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
但我还没有找到任何允许号码感知的选项:(
在大多数情况下,我只会通过评论来回答这类问题,但我怀疑其他开发人员可能 运行 会处理此问题。我四处寻找了一下,找不到关于此问题的任何明确文档。也许是因为 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-number-unaware-doctrineormmappingunderscorenamingstrategy https://github.com/doctrine/orm/issues/7855
仍然不太清楚为什么“他们”选择以这种方式做事,但是哦,好吧。 您可能想要 运行 "bin/console doctrine:schema:update --dump-sql" 只是为了查看这是否会影响您的数据库列名称并相应地进行调整。这些更改已经发布了几个星期,而且似乎没有多少人对更改感到愤怒,所以我猜大多数列名都没有嵌入数字。至少到目前为止。
对于那些使用 symfony4.3 并且仍然希望此警告消失的人,您可以在 service.yaml
中添加新的服务定义 custom_doctrine_orm_naming_strategy_underscore:
class: Doctrine\ORM\Mapping\UnderscoreNamingStrategy
arguments:
- 0
- true
并像这样更改 doctrine.yaml 的配置:
orm:
naming_strategy: custom_doctrine_orm_naming_strategy_underscore
在直接提交此更改之前,我建议您验证将 true
传递给 Doctrine\ORM\Mapping\UnderscoreNamingStrategy
不会影响代码的预期行为。
// 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
传递给 c'tor 将使 class 使用 NUMBER_AWARE_PATTERN
而不是 DEFAULT_PATTERN
private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';