To ja trochę napiszę o Twoim kontrolerze TodoController:
/**
* @Route("/todo/add", name="add")
*/
Te nazwy routów mało mówią, raczej powinno być np. 'add_todo'. W przypadku małej aplikacji to jeszcze nie problem, ale wydaje mi się, że lepiej wyrabiać sobie dobre nawyki.
if (!$todo) {
return $this->render('details.html.twig', [
'todo' => ''
]);
}
Osobiście rzuciłbym tutaj błąd 404, zamiast przekazywać pustą zmienną.
$request->getSession()
->getFlashBag()
->add('success', 'Z powodzeniem edytowano zadanie.')
Można to zrobić krócej, $this->addFlash('success', 'Z powodzeniem edytowano zadanie.');
Oprócz tego wydaje mi się, że setLangAction oraz indexAction powinny być w oddzielnym kontrolerze, bo akcje te nie mają za dużo wspólnego z todo. addChoicesToForm już zupełnie tu nie pasuje.