Как поделиться моделью 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, чтобы предоставлять услуги глобально. Таким образом, в вашем случае объекты доступа к модели будут определяться как службы, как описано в предоставленной ссылке, а затем могут быть использованы из любого пакета.
Теперь, в какой пакет входят объекты службы? Мы можем поместить их в отдельный пакет, поскольку они распределены между другими пакетами. Однако я предполагаю, что модель не будет абсолютно симметричной для всех пучков, поэтому мы можем поместить общую модель в отдельный пакет,
и вставлять конкретные объекты в сам комплект. Затем методы инъекций, обсуждаемые в приведенной выше ссылке, могут быть использованы для обеспечения полной модели, специфичной для каждого пучка.
Это, по-видимому, обеспечивает максимальную де-мутацию.
Меня тоже интересует любая обратная связь, так как это общий сценарий разработки.
С уважением.