我正在使用Symfony 4.3.8,但找不到有关这些弃用的任何信息:
不建议使用的用户:不建议用户创建Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy而已不知道其编号,则将在Doctrine ORM 3.0中将其删除。
不建议在不知道数字的情况下创建Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy,并将在Doctrine ORM 3.0中将其删除。
我在stacktrace中进行了搜索,发现了这一点:
verbose 7.614802156 Error: https://npm.pkg.github.com/download/@tlabs/utils/1.0.1/afe9eaa6f9565f95c31563cbecfe617d7970f44077302cbe9ca8ee3223550469: Request failed "401 Unauthorized"
at ResponseError.ExtendableBuiltin (/usr/share/yarn/lib/cli.js:696:66)
at new ResponseError (/usr/share/yarn/lib/cli.js:802:124)
at Request.<anonymous> (/usr/share/yarn/lib/cli.js:66996:16)
at Request.emit (events.js:210:5)
at Request.module.exports.Request.onRequestResponse (/usr/share/yarn/lib/cli.js:141441:10)
at ClientRequest.emit (events.js:210:5)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:583:27)
at HTTPParser.parserOnHeadersComplete (_http_common.js:115:17)
at TLSSocket.socketOnData (_http_client.js:456:22)
at TLSSocket.emit (events.js:210:5)
error An unexpected error occurred: "https://npm.pkg.github.com/download/@tlabs/utils/1.0.1/afe9eaa6f9565f95c31563cbecfe617d7970f44077302cbe9ca8ee3223550469: Request failed \"401 Unauthorized\"".
在此类中,构造函数始终不带参数地被调用,因此$ numberAware始终为false。
该类在由Symfony Dependency Injection自动生成的文件中调用,所以我无法对其进行“编辑” ...
我认为可能是在doctrine.yaml中:
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;
}
但是我还没有找到任何允许数字识别的选项:(
答案 0 :(得分:58)
在大多数情况下,我只会在评论中回答此类问题,但我怀疑其他开发人员可能会遇到此问题。我戳了一下,找不到关于此问题的任何明确文档。也许是因为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”,以查看这是否会影响数据库列名并相应地进行调整。更改已经进行了几周,并且似乎对此更改并不感到愤怒,所以我想大多数列名称都没有嵌入数字。至少到目前为止。
答案 1 :(得分:0)
对于那些使用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
传递给角色将使该类使用NUMBER_AWARE_PATTERN
而不是DEFAULT_PATTERN
private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';