J'utilise Symfony 4.3.8 et je ne trouve aucune information sur ces dépréciations:
Déprécié par 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 le rendre conscient du numéro est déconseillée 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 :(
la source
Réponses:
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 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é.
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 était juste un 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 affecte 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.
la source
Pour ceux qui travaillent avec symfony4.3 et veulent toujours que cet avertissement disparaisse, vous pouvez ajouter ajouter une nouvelle définition de service dans service.yaml
et changez la configuration de doctrine.yaml comme ceci:
avant de procéder directement à la validation de ce changement, je vous suggère de vérifier que le passage
true
àDoctrine\ORM\Mapping\UnderscoreNamingStrategy
n'affecte pas le comportement attendu de votre code.Petit conseil:
passer
true
au c'tor fera utiliser la classe auNUMBER_AWARE_PATTERN
lieu duDEFAULT_PATTERN
la source