Модели без доступа к базе данных в symfony2

#php #symfony

#php #symfony

Вопрос:

В настоящее время я изучаю, как использовать фреймворк symfony2.

Просматривая кулинарную книгу, я начинаю понимать, как все сочетается.

Однако у меня есть 2 вопроса относительно сущностей, которые, как я полагаю, являются моделями в шаблоне MVC:

  • В документации, похоже, много говорится о сущностях, использующих doctrine в качестве ORM. Если у меня есть объект / модель, которая не требует никакого ORM, это все еще считается «объектом»?

  • В большинстве руководств, которые я видел, все объекты часто помещаются в папку с именем «entities» в пакете приложений. С большим количеством объектов в приложении я чувствую, что это может стать довольно беспорядочным и неорганизованным. Как я могу группировать и организовывать объекты?

Приветствия 🙂

Ответ №1:

что касается вашего вопроса, как организовать ваши классы моделей:

Вы можете добавить вложенные папки в папку «Entity», а затем просто следовать этой структуре в вашем определении пространства имен, например:

 <?php

namespace AcmeSampleBundleEntitySubfolderEntityClass
  

что касается вашего вопроса о работе без orm: это просто, просто не используйте его.
ваши классы будут вести себя как «обычные» классы..

Но для этого вам понадобится какой-то интерфейс, например, EntityManager в Doctrine2.

Я бы всегда предпочел использовать ORM / ODM..

В этом случае я бы просто добавил простой метод в ваш класс сущностей:

 <?php

public function sendByEmail() {

// Do stuff
}
  

Вам вообще не нужно сохранять (сохранять в БД) материал. Обратите внимание, что в symfony1.4 был save() метод для сущностей. В Symfony2 материал сохраняется через $entityManager->persist($entity);

Комментарии:

1. Что я имел в виду, не используя ORM, так это то, что некоторые объекты вообще не будут касаться базы данных, вместо этого они могут читать и записывать в файлы или какое-либо другое хранилище.

2. Спасибо, не знал, что doctrine может это сделать. Как насчет случаев, когда я хочу, чтобы моя сущность обрабатывала и проверяла некоторые данные, но вместо их сохранения она должна отправлять данные по электронной почте. В этом случае я должен все еще использовать EntityManager?

Ответ №2:

Сущности — это модели, хранящиеся в реляционной базе данных. Документы — это модели, хранящиеся в базах данных документов (например, MongoDB).

Если вы не хотите привязывать свою модель к определенному пространству имен в зависимости от того, какой тип хранилища вы используете, вот что я предлагаю. Создайте Model пространство имен для ваших классов моделей. Если вы решите использовать реляционную базу данных, вы расширяете свой класс модели и помещаете его в Entity пространство имен, предоставляя информацию о сопоставлении во внешнем файле. Если позже вы решите перейти к базе данных документов, вы сделаете то же самое, но используете Document пространство имен.

Хороший пример этой идеи см. в FOSUserBundle .

Ответ №3:

Когда вы говорите, что у вас есть объект / модель, которая не требует никакого ORM, вы имеете в виду :

  • Модель очень проста, поэтому вы можете создавать свои собственные запросы к базе данных или :
  • Данные могут храниться в обычных файлах

?

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

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

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

Чтобы ответить на ваш второй вопрос, у меня есть модель из более чем 50 объектов, и это не создает беспорядка. Внутри классов сущностей я сообщаю пользователю, где найти модель сущностей-отношений, так что это понятно.

Это вам помогает?