Symfony Routing Cookbook: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| Line 1: | Line 1: | ||
[[Category:Symfony]] [[Category:PHP]] [[Category:Web Development]] | [[Category:Symfony]] [[Category:PHP]] [[Category:Web Development]] | ||
== Defining a route == | |||
Defining a route using annotations in a controller class: | |||
<syntaxhighlight lang="php" highlight="5,10"> | |||
// 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) | |||
{ | |||
// ... | |||
} | |||
} | |||
</syntaxhighlight> | |||
This basically creates a new page on the site. | |||
Routes can alternatively be defined using Yaml, XML, or PHP, e.g.: | |||
<syntaxhighlight lang="yaml"> | |||
# app/config/config.yml | |||
framework: | |||
# ... | |||
router: { resource: "%kernel.root_dir%/config/routing.yml" } | |||
</syntaxhighlight> | |||
== Routing aliases == | == Routing aliases == | ||
Revision as of 21:02, 29 January 2015
Defining a route
Defining a route using annotations in a controller class:
// 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" }
Routing aliases
# app/config/routing.yml
# redirecting the root
# a route to "/app" must be defined somewhere...
root:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /app
permanent: true
Routing to a template with the same name as the action
Use the @Template annotation[1], which is part of the SensioFrameworkExtraBundle.[2]
This is for cases where the template names match the controller names.
In this case the controllers return arrays containing variable page content, no Response objects. If they return Response objects the @Template annotation will be ignored.
To map the indexAction controller to the Resources/views/index.html.twig template:
// MyBundle/Controller/MyController.php
// ...
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class MyController extends Controller
{
/**
* @Route("/", name="_my_landing")
* @Template()
*/
public function indexAction()
{
return array(
'foo' => 'bar',
'biz' => 'bash');
}
}