Как поделиться моделью Symfony2 с несколькими проектами

Мы создаем SaaS, который контролирует определенные активы. Это означает, что он принимает данные, сохраняет их и отображает в веб-интерфейсе.

Для этого у нас есть несколько компонентов, которые мы создали с помощью /, переходим к Symfony2:

  • внешнее веб-приложение, в котором пользователи могут просматривать свои данные.
  • базовое административное веб-приложение, в котором мы создаем новые мониторы, пользователей и т.д.
  • API
  • приложение, которое извлекает полученные данные из очереди и помещает их в нашу базу данных (теперь это отдельный script, но я думаю о том, чтобы переработать это как команду Symfony, вызываемую cron)

Все эти четыре приложения используют одну и ту же модель: наша основная база данных, в которой хранятся все пользователи, мониторы и данные.

Мой вопрос: как мне структурировать эти проекты в Symfony2?

  • Создать отдельный пакет, который содержит объекты для моей базы данных, и включить эти четыре проекта в эти объекты и работать с ними?
  • Можно ли создать каталог "model" в моей папке приложений Symfony, которая используется всеми связями в каталоге my/src?
  • Некоторые другие, более чистые способы сделать это?

Вариант 1 кажется немного странным, поскольку для меня, по моему мнению, нужен набор маршрутов, представлений, контроллеров и т.д. Использование его для объектов просто немного странно.

Вариант 2 выглядит хорошо, так как папка/приложение считается "общедоступной" в любом случае для всего, что находится в папке /src (поскольку, например, там также находятся параметры). Однако там нет "модели", и я не уверен, что там должно быть?

Я понимаю, что для Symfony 2 очень мало "лучших практик", так как это совершенно новое. Но я хотел посмотреть, есть ли какие-либо практики, более предпочтительные, чем другие, по вашему мнению.

Любая обратная связь более приветствуется. Спасибо заранее,

Дитер

Ответы

Ответ 1

То, что я сейчас делаю, - это первый вариант: создать отдельный пакет для ваших объектов. Это где я храню приборы, объекты, формы и связанные с сущностью тесты.

В пакете НЕ необходимо иметь маршрутизацию, контроллеры, представления и т.д. Я действительно видел пакетный пакет, и все, что он делает, это ресурсы для проекта blue-css, поэтому они могут быть легко повторно используется в проектах.

Как для добавления моделей в каталог приложения... Мне это не понравится. Я вижу каталог приложений как место, где должна быть вся конфигурация. Даже если вы можете переопределять представления под app/Resources, всякий раз, когда я хочу переопределить что-то, я создаю новый пакет.

Ответ 2

Я не использовал эту технику самостоятельно в приложении symfony2 реального мира - но это указатель, когда вы просили получить обратную связь.

контейнер услуг, похоже, является способом Smyfony2, чтобы предоставлять услуги глобально. Таким образом, в вашем случае объекты доступа к модели будут определяться как службы, как описано в предоставленной ссылке, а затем могут быть использованы из любого пакета.

Теперь, в какой пакет входят объекты службы? Мы можем поместить их в отдельный пакет, поскольку они распределены между другими пакетами. Однако я предполагаю, что модель не будет абсолютно симметричной для всех пучков, поэтому мы можем поместить общую модель в отдельный пакет, и вставлять конкретные объекты в сам комплект. Затем методы инъекций, обсуждаемые в приведенной выше ссылке, могут быть использованы для обеспечения полной модели, специфичной для каждого пучка.

Это, по-видимому, обеспечивает максимальную де-мутацию.

Меня тоже интересует любая обратная связь, так как это общий сценарий разработки.

С уважением.