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 .