Skip to content

Controllers and Routing

Creating Controller

To generate controllers, you should use the Maker bundle:

./bin/console make:controller


Note you must have already configured Maker Bundle

Configuring Routing

To configure Routing, you should use annotations

Your annotations should define the "magic string" values for each option.

Your controller should only have one action, though it is acceptable to have minor related actions such as a redirect in the same controller.

Your controller should contain no business logic, only glue code that uses services to handle business logic

Your controller should generally not handle exceptions, instead this should be handled globally using an EventListener

For example:

final class MyController extends AbstractController
     * @var BusinessLogic
    private $businessLogic;

    public function __construct(BusinessLogic $businessLogic)
        $this->businessLogic = $businessLogic;

     * @Route("/my-action-redirect", name="my_action_redirect")
    public function redirectToMyAction(): RedirectResponse
        return $this->redirectToRoute('my_action');

     * @Route("/my-action", name="my_action")
    public function action(): JsonResponse
        return new JsonResponse($this->businessLogic->getJsonString(), Response::HTTP_OK, [], true);

Using Routes

You should always use the functions:

  • \Symfony\Component\Routing\Generator\UrlGeneratorInterface::generate
  • \Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait::generateUrl
  • \Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait::redirectToRoute

To generate URLs, you should never write or create URLs are hard coded "magic strings"