Одно действие, повторно используемое в нескольких приложениях

#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:

Если вы хотите поделиться модулем (и, следовательно, также его действиями), правильный способ — создать плагин.