Ich verwende Symfony 4.3.8 und kann keine Informationen zu diesen Verwerfungen finden:
Veralteter Benutzer: Das Erstellen von Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy, ohne dass die Nummer bekannt gegeben wird, ist veraltet und wird in Doctrine ORM 3.0 entfernt.
Das Erstellen von Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy ohne Bekanntgabe der Nummer ist veraltet und wird in Doctrine ORM 3.0 entfernt.
Ich habe in Stacktrace gesucht und Folgendes gefunden:
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;
}
In dieser Klasse wird der Konstruktor immer ohne Parameter aufgerufen, daher ist $ numberAware immer falsch.
Diese Klasse wird in einer Datei aufgerufen, die von der Symfony Dependency Injection automatisch generiert wurde, sodass ich sie nicht "bearbeiten" kann ...
Ich dachte, vielleicht war es in der Lehre. 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
Ich habe jedoch keine Option gefunden, um die Nummer bekannt zu machen :(
quelle
Antworten:
In den meisten Fällen würde ich diese Art von Frage nur mit einem Kommentar beantworten, aber ich vermute, dass andere Entwickler auf dieses Problem stoßen könnten. Ich stöberte ein bisschen herum und konnte keine explizite Dokumentation zu diesem Thema finden. Vielleicht, weil das DoctrineBundle unter der Kontrolle der Doctrine-Leute und nicht der Symfony-Entwickler steht. Oder vielleicht bin ich nur ein schlechter Sucher.
In jedem Fall wurde zwischen 4.3 und 4.4 der Dienstname für die Unterstrich-Benennungsstrategie geändert.
Außerdem wurde eine Abschreibungsnachricht hinzugefügt, um Entwickler zu warnen, den Namen zu ändern. Wäre schön gewesen, wenn die Nachricht nur ein bisschen expliziter gewesen wäre, aber na ja. Wenn Sie also eine vorhandene App auf 4.4 und höher aktualisieren, müssen Sie Ihre Datei doctrine.yaml wahrscheinlich manuell bearbeiten, damit die Abschreibungsmeldung verschwindet.
Weitere Informationen (danke @janh), warum die Änderung vorgenommen wurde: https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctrineormmappingunderscorenamingstrategy https: // github. com / doctrine / orm / issue / 7855
Immer noch nicht wirklich klar, warum "sie" sich entschieden haben, die Dinge so zu machen, aber na ja. Sie möchten wahrscheinlich "bin / console doctrin: schema: update --dump-sql" ausführen, um festzustellen, ob sich dies auf die Namen Ihrer Datenbankspalten auswirkt, und diese entsprechend anpassen. Die Änderungen sind seit einigen Wochen nicht mehr verfügbar und es scheint nicht viel Empörung über die Änderung zu geben. Ich denke, die meisten Spaltennamen haben keine eingebetteten Nummern. Zumindest soweit.
quelle