Условно:
старое название:
vendor
name
новое название:
newvendor
newname
Для этого требуется:
- Переименовать структуру папок в соответствии с новыми именами
newvendor
иnewname
- Изменить в файлах расширения все вхождения
vendor
иname
наnewvendor
иnewname
:- Изменить имя расширения в
composer.json
- значение поляname
наnewvendor/newname
- Изменить в
namespace
в файлах все вхожденияvendor\name
наnewvendor\newname
- Изменить название расширения во всех местах, где обращение к нему жестко прописано, с
vendor\name
наnewvendor\newname
- Изменить в именах сервисов и маршрутов все сочетания
vendor.name
наnewvendor.newname
в файлах конфигурации - Изменить в путях к классам сервисов все сочетания
vendor\name
наnewvendor\newname
в файлах конфигурации - Изменить вхождения имени расширения в
info
файлах модулей администраторского, модераторского, личного разделов, добавляемых расширением (если они есть), в том числе ключи'filename'
и'auth'
- Изменить вхождения имени расширения в пути классов миграций-зависимостей в функции
depends_on()
в файлах миграций - Изменить вхождения
@vendor_extname
в PHP скриптах (в определениях шаблонов и языковых файлов) и в файлах стилей (если они есть) - Изменить имена событий (либо добавить такие же, но с новыми именами, а старые события пометить как
@deprecated
)
Чтобы это сделать, надо заменить все вхождения во всех файлах:vendor.name
наnewvendor.newname
vendor/name
наnewvendor/newname
vendor\name
наnewvendor\newname
vendor_name
наnewvendor_newname
- Изменить имя расширения в
- Заменить имя расширения в таблицах
notification_types
,ext
,modules
иmigrations
. Прототип функции для файлаext.php
(использовать в функцииenable_step()
, пример использования):Код: Выделить всё
/** * Rename extension * * @param string Old vendor/name * @param string New vendor/name * @return null */ function rename_extension($old_name, $new_name) { // For some fields vendor\name is used instead of vendor/name $old_name_revert_separator = str_replace('/', '\\', $old_name); $new_name_revert_separator = str_replace('/', '\\', $new_name); $db = $this->container->get('dbal.conn'); $db->sql_transaction('begin'); $sql_migrations = 'UPDATE ' . MIGRATIONS_TABLE . " SET migration_name = REPLACE(migration_name, '" . $db->sql_escape($old_name_revert_separator) . "', '" . $db->sql_escape($new_name_revert_separator) . "'), migration_depends_on = REPLACE(migration_depends_on, '" . $db->sql_escape($old_name_revert_separator) . "', '" . $db->sql_escape($new_name_revert_separator) . "')"; $db->sql_query($sql_migrations); $sql_modules = 'UPDATE ' . MODULES_TABLE . " SET module_basename = REPLACE(module_basename, '" . $db->sql_escape($old_name_revert_separator) . "', '" . $db->sql_escape($new_name_revert_separator) . "'), module_auth = REPLACE(module_auth, '" . $db->sql_escape($old_name) . "', '" . $db->sql_escape($new_name) . "')"; $db->sql_query($sql_modules); $sql_ext = 'UPDATE ' . EXT_TABLE . " SET ext_name = REPLACE(ext_name, '" . $db->sql_escape($old_name) . "', '" . $db->sql_escape($new_name) . "')"; $db->sql_query($sql_ext); $sql_notification_types = 'UPDATE ' . NOTIFICATION_TYPES_TABLE . " SET notification_type_name = REPLACE(notification_type_name, '" . $db->sql_escape(str_replace('/', '.', $old_name)) . "', '" . $db->sql_escape(str_replace('/', '.', $new_name)) . "')"; $db->sql_query($sql_notification_types); $db->sql_transaction('commit'); $cache = $this->container->get('cache'); $cache->purge(); }
Замечания и дополнения приветствуются.