Sök…
Introduktion
Routing är processen för att mappa en URL till en controller . Symfony har en kraftfull routingkomponent som låter dig definiera rutter.
Routing-komponenten stöder ett antal konfigurationsformat: kommentarer, YAML, XML och raw PHP.
parametrar
Parameter | detaljer |
---|---|
namn | Ruttens namn. Exempel: book_show |
väg | Sökvägen (kan innehålla jokertecken). Exempel: /book/{isbn} |
defaults | Standardvärden för parametrar |
Enkla rutter
Använda YAML:
# app/config/routing.yml
blog_list:
path: /blog
defaults: { _controller: AppBundle:Blog:list }
Använda kommentarer:
// 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", name="blog_list")
*/
public function listAction()
{
// ...
}
}
En begäran om URL /blog
kommer att hanteras med listAction()
för BlogController
inuti AppBundle
.
Rutter med platshållare
Använda YAML:
# app/config/routing.yml
blog_show:
path: /blog/{slug}
defaults: { _controller: AppBundle:Blog:show }
Använda kommentarer:
// 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}", name="blog_show")
*/
public function showAction($slug)
{
// ...
}
}
Alla förfrågningar med en URL-matchning /blog/*
kommer att hanteras med showAction()
-metoden för BlogController
inom AppBundle
. Controlleråtgärden kommer att få platshållarens värde som ett metodargument.
Till exempel kommer en begäran om /blog/my-post
att utlösa ett samtal till showAction()
med ett argument $slug
innehåller värdet my-post
. Med hjälp av detta argument kan controlleråtgärden ändra svaret beroende på platshållarens värde, till exempel genom att hämta blogginlägget med slug my-post
från databasen.
Standardvärden för platshållare
Om du vill ha en platshållare som kan utelämnas kan du ge den ett standardvärde:
Använda YAML:
# app/config/routing.yml
blog_list:
path: /blog/{page}
defaults: { _controller: AppBundle:Blog:list, page: 1 }
requirements:
page: '\d+'
Använda kommentarer:
// 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/{page}", name="blog_list", requirements={"page": "\d+"})
*/
public function listAction($page = 1)
{
// ...
}
}
I det här exemplet kommer både /blog
och /blog/1
URL: blog_list
rutten blog_list
och hanteras med listAction()
. I fallet med /blog
kommer listAction()
fortfarande att få $page
argumentet med standardvärdet 1
.