Вы не должны внедрять менеджер сущностей в сущность, это очень плохая практика и нарушает разделение интересов между классами.НО, если вы действительно хотите, вы действительно можете внедрить менеджера сущностей в вашу сущность.
ХОРОШАЯ ПРАКТИКА:
Создайте класс Model/Process
и включите в него все функции, которые касаются вашегомодель.Учебные сущности не являются модельными классами.В Model/Process
вы можете внедрить менеджер сущностей и любую другую нужную вам службу.
EDIT : Создавая класс Model/Process
, я имею в виду создание класса с именем Process
внутри Model
каталог в вашей папке /src
.Ваш путь вашего класса будет: /src/Model/Process
.Конечно, имя каталога или класса может быть любым, но это типичное соглашение.Ваш класс Model должен отвечать за всю вашу бизнес-логику, такую как проверка вашей модели и т. Д. Это действительно усложнит структуру вашего кода, но в долгосрочной перспективе будет полезным для крупномасштабных проектов.Вам также понадобится Model/ProcessManager
для правильного заполнения модели процесса в различных случаях (например, при загрузке из базы данных, пользовательской формы и т. Д.). Конечно, в конечном итоге все зависит от сложности и устойчивости.
Интересный подход к моделям в Symfony, в основном применимый в крупномасштабных проектах, можно найти здесь .
АЛЬТЕРНАТИВЫ:
Если вы обращаетесь к атрибуту opponent
только после загрузки объекта, вы можете использовать Doctrine PostLoad LifecycleCallback для правильной установки атрибута opponent
.Это не плохая практика:
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class Product
{
// ...
private $opponentObject;
/**
* @ORM\PostLoad
*/
public function onPostLoad(LifecycleEventArgs $args){
$em = $args->getEntityManager();
$id = $this->answersInRelatedQuestionnaires['opponent']['id'];
$this->opponentObject = $em->getRepository(Opponent::class)->find($id);
}
public function getOpponent() {
return $this->opponent;
}
}
Наконец, если вы действительно хотите внедрить менеджер сущностей в вашу сущность, вы можете добиться этого с помощью внедрения зависимостей через автоматическое подключение:
use Doctrine\ORM\EntityManagerInterface;
class Process
{
private $em;
public function __contruct(EntityManagerInterface $em)
{
$this->em = $em;
}
....
}