Позбавлення: Вчення \ ORM \ Картографування \ UnderscoreNamingStrategy, не повідомляючи про це число, застаріле


53

Я використовую Symfony 4.3.8, і я не можу знайти жодної інформації про знищення строків:

Застарілий користувач: Створення доктрини \ ORM \ Mapping \ UnderscoreNamingStrategy, не повідомляючи про її номер, застаріло і буде видалено в Doctrine ORM 3.0.

Створення доктрини \ ORM \ Картографування \ UnderscoreNamingStrategy без повідомлення про її кількість застаріле і буде видалено в Doctrine ORM 3.0.

Я здійснив пошук у стектейрі та виявив таке:

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, тому я не можу "редагувати" його ...

Я думав, можливо, це було в 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

Але я не знайшов жодного варіанта, щоб дозволити номер знати :(


3
Просто зробіть новий проект 4.4.0 (щойно випущений, так) і doctrine.yaml має в ньому "naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware". Спробуйте налаштувати своє.
Церад

Відповіді:


111

У більшості випадків я б просто відповів на таке питання з коментарем, але підозрюю, що інші розробники можуть зіткнутися з цією проблемою. Я трохи розібрався і не зміг знайти жодної явної документації з цього питання. Можливо, тому, що DoctrineBundle знаходиться під контролем людей Доктрини, а не розробників 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 / доктрина / орм / питання / 7855

Досі не дуже зрозуміло, чому вони вирішили робити так, але добре. Ви, ймовірно, хочете запустити "bin / console doctrine: schema: update --dump-sql", просто щоб побачити, чи впливає це на назви стовпців вашої бази даних та відповідним чином відрегулювати її. Зміни існують уже кілька тижнів, і, схоже, не так багато виє обурення щодо змін, тому я думаю, що більшість імен стовпців не мають вбудованих номерів. Поки щонайменше.


стару зміну стратегії (помилково), наприклад, $ singleMd5Key на single_payu_md5key та нову (правильно) single_payu_md5_key. але так, що це зміни до н.е., у нас все це безлад.
Томек

@ TomekKobyliński Чи вдалося вам знайти будь-яку документацію щодо цього, крім самого коду? Досі не вдається зрозуміти, чому конвенція про іменування зміниться (і, можливо, примусить змінити схему бази даних), коли прийде Доктрина 3. Просто здається, що обидва підходи підтримали б.
Церад

1
Тож замість примушування до зміни схеми бази даних вам доведеться вручну оновлювати відображення сутності? Не впевнений, що гірше, і це насправді не вирішує питання, чому взагалі змінюватися. Немає проблем із створенням більш "правильної" стратегії, але я все ще не розумію, чому оригінальна стратегія "неправильна" в будь-якому відповідному сенсі.
Церад

1
Приїхав сюди і після занурення в цю депресію (знайдений за допомогою phpunit). Було б добре посилатися на рецепт yaml у відповіді, оскільки це підтверджує запропоновану поправку
Rvanlaak

1
@Cerad Є щось у інформації про оновлення доктрини: github.com/doctrine/orm/blob/2.8.x/… Я думаю, що github.com/doctrine/orm/isissue/7855 є відповідною проблемою.
січ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.