Как поделиться моделью Symfony2 с несколькими проектами - PullRequest
14 голосов
/ 21 сентября 2011

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

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

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

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

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

  1. Создать ли отдельный пакет, содержащий объекты для моей базы данных, и иметьчетыре проекта включают эти объекты и работают с ними?
  2. Могу ли я создать каталог 'model' в папке моего приложения Symfony, который используется всеми пакетами в моем каталоге / src?
  3. Какой-то другой, более чистый способ сделать это?

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

Вариант 2, кажется, в порядке, поскольку папка / app в любом случае считается «общей» для всего, что находится в папке / src (поскольку, например, параметры также находятся там).Тем не менее, там нет папки 'model', и я не уверен, что она должна быть?

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

Любые отзывы более чем приветствуются.Заранее спасибо,

Дитер

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

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

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

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

1 голос
/ 24 сентября 2011

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

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

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

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

С уважением.

...