#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 объектов, и это не создает беспорядка. Внутри классов сущностей я сообщаю пользователю, где найти модель сущностей-отношений, так что это понятно.
Это вам помогает?