Подтвердить что ты не робот

Как переименовать пакет в symfony?

Мой пакет находится в src/Cinergy/Bundle/ComponentBundle/CinergyComponentBundle.php а логическим названием пакета является 'CinergyComponentBundle'.

Поскольку я не придерживался соглашения об именах компании, я должен изменить логическое имя пакета. Предположим, что я должен переименовать его в 'XXXCinergyComponentBundle'

Какие файлы мне нужно изменить?

Я попытался переименовать файл CinergyComponentBundle.php и содержащий класс в XXXCinergyComponentBundle.php. Я также изменил ссылку в AppKernel.

К сожалению, это не работает. Когда я пытаюсь очистить кеш, я получаю это сообщение об ошибке:

[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]                                   
The service "cinergy.people.direct.php" has a dependency on a non-existent service "cinergy.work.registry". 

Эти две службы относятся к набору с новым именем. Это приводит меня к выводу, что я что-то пропустил в процессе переименования.

Есть идеи?

4b9b3361

Ответ 1

Я только что закончил переименование самого пакета и оказался в том же месте, что и пару минут назад. К этому моменту я использовал функцию замены редакторов. Оказывается, есть некоторые файлы, которые нуждаются в дополнительной заботе, которые находятся здесь (при условии, что ваше старое имя Bundle было AcmeOldBundle, новым будет AcmeNewBundle):

  1. Acme\OldBundle\OldBundle.php → NewBundle.php
  2. Acme\OldBundle\DependencyInjection\AcmeOldExtension.php → AcmeNewExtension.php

Не забудьте также обновить имена классов внутри файлов.

Ответ 2

Текущие ответы действительно объясняют, что делать, чтобы переименовать пакет, но они не учитывают некоторые вещи:

  1. Переименуйте /app/AppKernel.php в /app/AppKernel.php

    Из:

    $bundles = [
        // ...
        new Acme\OldBundle\AcmeOldBundle(),
    ];
    

    Для того, чтобы:

    $bundles = [
        // ...
        new Acme\NewBundle\AcmeNewBundle(),
    ];
    
  2. Переименование файлов и папок

    Вам необходимо переименовать файлы и папки, содержащие ваш код:

    src/Acme/OldBundle -> src/Acme/NewBundle
    src/Acme/OldBundle/OldBundle.php -> src/Acme/NewBundle/NewBundle.php
    
    # If present
    src/Acme/OldBundle/DependencyInjection/AcmeOldExtension.php -> src/Acme/NewBundle/DependencyInjection/AcmeNewExtension.php
    
  3. Пространства имен

    Это, вероятно, пойдет с забыванием нескольких файлов и поисками вокруг вашего пакета для каждого матча. Лучше всего сделать это: find-replace:

    # find -> replace
    acme_old -> acme_new
    Acme\OldBundle\ -> Acme\NewBundle
    AcmeOld -> AcmeNew
    Acme:Old -> Acme:New
    Acme:OldBundle -> Acme:NewBundle
    

    Обязательно проверьте все пространства имен, имена классов и файлы конфигурации в своем комплекте.

  4. Глобальные файлы конфигурации

    Найдите любое вхождение вашего старого имени пакета в app/config/ и замените его новым именем пакета.

Ответ 3

Вам необходимо обновить все пространство имен в каждом файле.

Вы использовали namespace Cynergy\ComponentBundle\Something; но теперь вы используете namespace XXXCynergy\ComponentBundle\Something;

Не забудьте обновить свои services.(xml|yml).