Я использую Symfony 4.3.8 и не могу найти никакой информации об этих устареваниях:
Пользователь устарел: создание Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy без уведомления о номере устарело и будет удалено в Doctrine ORM 3.0.
Создание Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy без уведомления о номере устарело и будет удалено в Doctrine ORM 3.0.
Я искал в stacktrace и нашел это:
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;
}
В этом классе конструктор всегда вызывается без параметров, поэтому $ numberAware всегда ложно.
Этот класс вызывается в файле, который был автоматически сгенерирован Symfony Dependency Injection, поэтому я не могу его "отредактировать" ...
Я думал, может быть, это было в 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
Но я не нашел ни одной опции, позволяющей знать число :(
symfony
doctrine-orm
doctrine
leobrl
источник
источник
Ответы:
В большинстве случаев я просто отвечал на этот вопрос комментарием, но я подозреваю, что другие разработчики могут столкнуться с этой проблемой. Я немного покопался и не смог найти какой-либо явной документации по этому вопросу. Возможно, потому что DoctrineBundle находится под контролем людей Doctrine, а не разработчиков Symfony. Или, может быть, я просто плохой искатель.
В любом случае, между 4.3 и 4.4 имя службы для стратегии именования подчеркиваний было изменено.
И было добавлено сообщение об амортизации, чтобы предупредить разработчиков об изменении названия. Было бы неплохо, если бы сообщение было чуть более явным, ну да ладно. Поэтому, если вы обновляете существующее приложение до версии 4.4 и выше, вам, вероятно, потребуется вручную отредактировать файл doctrine.yaml, чтобы сообщение об устаревании исчезло.
Еще немного информации (спасибо @janh) о том, почему было сделано изменение: https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctrineormmappingunderscorenamingstrategy https: // github. ком / доктрина / ОРМ / вопросы / 7855
До сих пор не совсем понятно, почему «они» решили так поступить, ну да ладно. Возможно, вы захотите запустить «bin / console doctrine: schema: update --dump-sql» просто чтобы посмотреть, влияет ли это на имена столбцов вашей базы данных и внести соответствующие изменения. Изменения уже несколько недель, и, кажется, не так много воплей возмущения по поводу этого изменения, поэтому я думаю, что в большинстве имен столбцов нет встроенных чисел. Пока, по крайней мере.
источник
Для тех, кто работает с symfony4.3 и все еще хочет, чтобы это предупреждение исчезло, вы можете добавить добавить новое определение сервиса в service.yaml
и измените конфигурацию doctrine.yaml так:
перед тем как приступить к выполнению этого изменения, я бы посоветовал вам проверить, что переход
true
кDoctrine\ORM\Mapping\UnderscoreNamingStrategy
не влияет на ожидаемое поведение вашего кода.Быстрый совет:
передача
true
в c'tor заставит класс использоватьNUMBER_AWARE_PATTERN
вместоDEFAULT_PATTERN
источник