Symfony Routing Basics

From Littledamien Wiki
Revision as of 21:26, 29 January 2015 by Video8 (talk | contribs)
Jump to navigation Jump to search

Defining a route

Defining a route using annotations in a controller class:[1]

// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BlogController extends Controller
{
    /**
     * @Route("/blog/{slug}")
     */
    public function showAction($slug)
    {
        // ...
    }
}

This basically creates a new page on the site.

Routes can alternatively be defined using Yaml, XML, or PHP, e.g.:

# app/config/config.yml
framework:
    # ...
    router: { resource: "%kernel.root_dir%/config/routing.yml" }

Wildcards in routes

Wildcards are defined with curly braces, e.g. {slug} below:[2]

/**
     * @Route("/blog/{slug}")
     */
    public function showAction($slug)
    {
        // ...
    }

This route will match /blog/*. Any value placed after /blog/ will be passed to the method as the value of the $slug variable. E.g. a request for /blog/hello-world will cause value of $slug to be "hello-world".

Note that placeholders are required. In the example above, the URL /blog would require its own separate route.

Default wildcard values

In effect, the defaults attribute of @Route makes wildcard values optional in URLs:[3]

/**
     * @Route("/blog/{page}", defaults={"page"=1})
     */
    public function showAction($page)
    {
        // ...
    }

If a page value is not supplied in the URL, $page will have a default value of 1.

Restricting wildcard values

The requirements attribute of the @Route annotation enforces formatting of wildcard values with regular expressions.[4]

/**
     * @Route("/blog/{page}", defaults={"page"=1}, requirements={"page"="\d+"})
     */
    public function showAction($page)
    {
        // ...
    }

Now only integer values will match the route. A separate route could be created for string values.

Notes

  1. Basic Route Configuration, Symfony routing documentation
  2. Routing with Placeholders, Symfony routing documentation
  3. Required and Optional Placeholders, Symfony routing documenation
  4. Adding Requirements, Symfony routing documentation]