
Нередко ошибки, из-за которых сайт падает, связаны с некорректным удалением компонентов. Например, остаются хуки, которые после удаления продолжают жить собственной жизнью. В документации очень лаконично описано, что
должно быть выполнено при удалении компонента. Боюсь, что эту краткость трактуют как руководство к действию. В результате actionDeleteComponent() в backend.php может иметь такой вид
public function actionDeleteComponent(){ $model = new cmsModel(); $model->deleteController('somecontroller'); $this->redirectTo('admin', 'controllers'); }
Ни о каких файлах и речи нет. Но нужно это как-то поправить!
Вначале я пошел по легкому пути и решил удалить основные папки, нашел крутой хелпер. Написал, но такое решение меня не устроило по нескольким причинам. Основным было то, что я не охватывал все файлы, которые были в компоненте.
И тут вспомнил, что при установке компонента появляются голубенькие папочки. (Для многих, я не исключение 😁, это всего лишь справочная информация и вы уже быстро двигаетесь дальше.)
Посмотрел в таблицу controllers — да, есть поле files. Эврика, вот они исходные данные!
Вариант, который представлен, удаляет файлы компонента, папки решил не трогать. Замечу, что на исчерпывающее решение не претендую, всегда есть какие-то нюансы, с которыми конкретный разработчик должен справится самостоятельно. Код выложен на gist.github.com. Будут замечания — не стесняйтесь.
Добрый день! Вообще это чудесный аддон и в коробке он был бы очень актуален, так как иначе много мусора и порой неработающий сайт получается после удаления компонента, так как если код написан криво, то откуда-то тянется информация. А так, при удалении всех файлов и директорий получается полноценное удаление.
Почему решили не удалять сами папки?
С папками не все однозначно, в компонентах есть js, css, кто-то трейтами и своими классами пользуется, так что сделано так, чтобы не навредить. Код постарался сделать универсальным для любого компонента, чтобы он удалял ровно те файлы, которые были при установке, а раз были при установке, то записаны в поле files таблицы cms_controllers.