Как вариант (если работать с анемичной моделью):
Контроллер:
class InviteController
{
public function acceptCompanyInviteAction(Invite $invite)
{
/** просто как пример */
$this->get('invite.manager')->acceptCompanyInvite($invite);
return new Response('acccepted');
}
Менеджер инвайта:
class InviteManager
{
/** @var InviteRepository $repository */
private $repository;
/** @var EntityManagerInterface $entityManager */
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
$this->repository = $entityManager->getRepository('AppBundle:Invite');
}
public function acceptCompanyInvite(Invite $invite)
{
/** ваша логика */
$this->entityManager->persiste($invite);
$this->entityManager->flush($invite);
return $invite;
}
Менеджер создается для абстрагирования от репозитория. Использовать репозиторий в контроллере както по мне не очень. У нас, как правило под каждую Entity есть свой репозиторий и менеджер. Структура каталогов в вашем случая у нас такая:
Entity
-----Repository
---------InviteRepository
-----Manager
---------InviteManger
-----Invite
Ну ето очень простой способ, не лучший но довольно акуратный.
А вообще, если есть время ознакомтесь с такими подходами:
http://williamdurand.fr/2013/08/07/ddd-with-symfon... и
https://jorgearco.com/ddd-with-symfony/ - вот репа последнего:
https://github.com/jorge07/ddd-playground