На Symfony2 с Doctrine2 Object = Entity? - PullRequest
       33

На Symfony2 с Doctrine2 Object = Entity?

4 голосов
/ 18 ноября 2011

Допустим, у меня есть класс User:

$user = new User(1);
$user->setName('Bob'); // save "bob" to database with ID 1
$user->setGender('Male'); // save "male" to database with ID 1

echo $user->getName(); // display bob
echo $user->getGender(); // display "male";

echo $user->getDesignation() // display "Mr. Bob"

Теперь в Symfony2 с Doctrine2 кажется, что Entity - это объект, который используется для создания связи с базой данных.Поэтому я думаю, что все функции setName(), setGender(), getName() & getGender() должны находиться внутри файла, который находится в каталоге Entity пакета (поскольку эти функции выполняют ОБНОВЛЕНИЕ или ВЫБОР данных из базы данных).

Но как насчет getDesignation()?

public function getDesignation() {
  if ($this->getGender() == 'Male') return "Mr. ".$this->getName();
  else return "Ms. ".$this->getName();
}

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

Ответы [ 2 ]

6 голосов
/ 18 ноября 2011

Можно ли ставить функцию, которая абсолютно не связана с базой данных?

Да, все в порядке.Но посмотрите внимательно, он все еще несколько «связан» с базой данных, так как использует данные пола и имени, которые изначально получены из персистентного слоя (базы данных).

Разве это не плохая практика??

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

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

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

public function getDesignation() {
  if ($this->getGender() == 'Male') return "Mr." else return "Ms.";
}

Поскольку вы можете легко перевести ее в свой шаблон {{entity.designation | trans}}

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

С уважением

...