Автоматизация удаления контроллера

+7
281
Автоматизация удаления контроллера

Нередко ошибки, из-за которых сайт падает, связаны с некорректным удалением компонентов. Например, остаются хуки, которые после удаления продолжают жить собственной жизнью. В документации  очень лаконично описано, что
должно быть выполнено при удалении компонента. Боюсь, что эту краткость трактуют как руководство к действию. В результате actionDeleteComponent() в backend.php может иметь такой вид

  1. public function actionDeleteComponent(){
  2. $model = new cmsModel();
  3. $model->deleteController('somecontroller');
  4. cmsUser::addSessionMessage(sprintf(LANG_CP_COMPONENT_IS_DELETED, 'somecontroller'), 'success');
  5. $this->redirectTo('admin', 'controllers');
  6. }

Ни о каких файлах и речи нет. Но нужно это как-то поправить!
Вначале я пошел по легкому пути и решил удалить основные папки, нашел крутой хелпер. Написал, но такое решение меня не устроило по нескольким причинам. Основным было то, что я не охватывал все файлы, которые были в компоненте. 
И тут вспомнил, что при установке компонента появляются голубенькие папочки. (Для многих, я не исключение 😁, это всего лишь справочная информация и вы уже быстро двигаетесь дальше.) 
Посмотрел в таблицу controllers — да, есть поле files. Эврика, вот они исходные данные! 
Вариант, который представлен, удаляет файлы компонента, папки решил не трогать. Замечу, что на исчерпывающее решение не претендую, всегда есть какие-то нюансы, с которыми конкретный разработчик должен справится самостоятельно. Код выложен на gist.github.com. Будут замечания — не стесняйтесь.

+1
Def Def 6 дней назад #

Добрый день! Вообще это чудесный аддон и в коробке он был бы очень актуален, так как иначе много мусора и порой неработающий сайт получается после удаления компонента, так как если код написан криво, то откуда-то тянется информация. А так, при удалении всех файлов и директорий получается полноценное удаление. 

Почему решили не удалять сами папки?

0
IamB IamB 6 дней назад #

С папками не все однозначно, в компонентах есть js, css, кто-то трейтами и своими классами пользуется,  так что сделано так, чтобы не навредить.  Код постарался сделать универсальным для любого компонента, чтобы он удалял ровно те файлы, которые были при установке, а раз были при установке, то записаны в поле files таблицы cms_controllers.

Еще от автора

Google Таблицы
Поле призвано упростить работу с таблицами. Можно создавать таблицы во встроенном визуальном редакторе, но это занятие как минимум трудоемкое.
Создание таск-трекера своими(почти) руками
Этот пост появился благодаря теме на форуме. Поразмышлял, пописал код, поставил опыты и. думаю, процентов на 80 решил задачу с форума.
Логгер для проекта
По случаю написал логгер. Конечно, можно было взять готовый, поскольку только ленивые их не писали.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.