talkRepository = $talkRepository; $this->speakerRepository = $speakerRepository; $this->slackNotifier = $slackNotifier; $this->eventDispatcher = $eventDispatcher; $this->talkToSpeakersRepository = $talkToSpeakersRepository; $this->unitOfWork = $unitOfWork; } /** * @return bool */ public function handle(Request $request, Event $event, FormInterface $form, Speaker $speaker) { $form->handleRequest($request); if (!$form->isSubmitted() || !$form->isValid()) { return false; } /** @var $talk Talk */ $talk = $form->getData(); $talk->setSubmittedOn(new DateTime()); $this->speakerRepository->save($speaker); if (!$this->unitOfWork->isManaged($talk)) { $this->eventDispatcher->addListener(KernelEvents::TERMINATE, function () use ($talk, $event) { $this->slackNotifier->notifyTalk($talk, $event); }); } $this->talkRepository->save($talk); $this->talkToSpeakersRepository->addSpeakerToTalk($talk, $speaker); return true; } }