web-dev-qa-db-fra.com

Obsolescence: Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy sans le rendre conscient du numéro est déconseillé

J'utilise Symfony 4.3.8 et je ne trouve aucune information sur ces dépréciations:

Déconseillé à l'utilisateur: la création de Doctrine\ORM\Mapping\UnderscoreNamingStrategy sans en rendre le numéro conscient est déconseillée et sera supprimée dans Doctrine ORM 3.0.

La création de Doctrine\ORM\Mapping\UnderscoreNamingStrategy sans lui donner de numéro est obsolète et sera supprimée dans Doctrine ORM 3.0.

J'ai cherché dans stacktrace et j'ai trouvé ceci:

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;
}

Dans cette classe, le constructeur est toujours appelé sans param, donc $ numberAware est toujours faux.

Cette classe est appelée dans un fichier qui a été généré automatiquement par Symfony Dependency Injection, donc je ne peux pas le "modifier" ...

Je pensais que c'était peut-être dans 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

Mais je n'ai trouvé aucune option pour permettre au numéro de connaître :(

52
leobrl

Dans la plupart des cas, je répondrais simplement à ce genre de question avec un commentaire, mais je pense que d'autres développeurs pourraient rencontrer ce problème. J'ai fouillé un peu et je n'ai pas pu trouver de documentation explicite sur ce problème. Peut-être parce que DoctrineBundle est sous le contrôle des gens de Doctrine et non des développeurs de Symfony. Ou peut-être que je suis juste un mauvais chercheur.

Dans tous les cas, entre 4.3 et 4.4, le nom du service pour la stratégie de dénomination de soulignement a été modifié.

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

Et un message de dépréciation a été ajouté pour avertir les développeurs de changer le nom. Cela aurait été bien si le message avait été un tout petit peu plus explicite mais bon. Donc, si vous mettez à niveau une application existante vers 4.4 et au-delà, vous devrez probablement modifier manuellement votre fichier doctrine.yaml pour faire disparaître le message de dépréciation.

Quelques informations supplémentaires (merci @janh) sur la raison pour laquelle le changement a été effectué: https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctrineormmappingunderscorenamingstrategy = https://github.com/doctrine/orm/issues/7855

Je ne sais toujours pas vraiment pourquoi "ils" ont choisi de faire les choses de cette façon, mais bon. Vous souhaiterez probablement exécuter "bin/console doctrine: schema: update --dump-sql" juste pour voir si cela a un impact sur les noms de colonne de votre base de données et ajuster en conséquence. Les changements sont sortis depuis plusieurs semaines maintenant et il ne semble pas y avoir beaucoup de hurlements d'indignation à propos du changement, donc je suppose que la plupart des noms de colonnes n'ont pas de numéros intégrés. Jusqu'à présent au moins.

96
Cerad