#symfony1 #code-duplication
#symfony1 #дублирование кода
Вопрос:
У меня есть приложение symfony с двумя разными приложениями (интерфейс, серверная часть), но есть одно общее действие. Теперь я продублировал его код в обоих приложениях, но мне это совсем не нравится.
Есть ли способ повторно использовать действие в нескольких приложениях symfony?
Ответ №1:
Самым простым способом было бы создать базовый класс actions в lib
с общими методами / действиями. Тогда модули, которым необходимо использовать эту функциональность, могут просто расширить этот базовый класс вместо sfActions
.
Вы также, вероятно, могли бы просто использовать прослушиватель событий в method_not_found
sfComponent. Но это может работать не так, как ожидалось, если метод является фактическим действием (и он также был бы доступен во всех модулях и всех компонентах без какой-либо специальной логики обнаружения).
Самым сложным способом было бы создать плагин. Конечно, для этого потребовалось бы сделать логику, которая работает с любыми моделями, динамической, чтобы ее можно было настроить, или изолировать соответствующие части схемы от схемы плагина.
Ответ №2:
Еще два варианта:
1) если вы используете Linux, создайте символическую ссылку на ваш actions.class.php или даже целый модуль, если вы используете одни и те же шаблоны.
cd apps/backend/modules/name
ln -s ../../frontend/modules/name name
2) если вы не зашли слишком далеко в разработке, измените фактор вашего проекта, чтобы в нем было только ОДНО приложение (мое любимое).
Комментарии:
1. 1 для # 2 это имеет определенные преимущества по нескольким причинам… хотя # 1 выглядит как ошибка 🙂
2. Да, если бы мне пришлось начинать с нуля, я бы, вероятно, сделал это только в одном приложении…
Ответ №3:
Если вы хотите поделиться модулем (и, следовательно, также его действиями), правильный способ — создать плагин.