Zoeken…
Invoering
Routering is het proces waarbij een URL wordt toegewezen aan een controller . Symfony heeft een krachtige component Routing waarmee u routes kunt definiëren.
De component Routing ondersteunt een aantal configuratie-indelingen: annotaties, YAML, XML en raw PHP.
parameters
Parameter | Details |
---|---|
naam | De naam van de route. Voorbeeld: book_show |
pad | Het pad (kan jokertekens bevatten). Voorbeeld: /book/{isbn} |
defaults | Standaardwaarden van parameters |
Eenvoudige routes
YAML gebruiken:
# app/config/routing.yml
blog_list:
path: /blog
defaults: { _controller: AppBundle:Blog:list }
Annotaties gebruiken:
// 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()
{
// ...
}
}
Een aanvraag voor de /blog
URL wordt afgehandeld door de methode listAction()
van de BlogController
in AppBundle
.
Routes met tijdelijke aanduidingen
YAML gebruiken:
# app/config/routing.yml
blog_show:
path: /blog/{slug}
defaults: { _controller: AppBundle:Blog:show }
Annotaties gebruiken:
// 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)
{
// ...
}
}
Elk verzoek met een URL-matching /blog/*
wordt afgehandeld door de methode showAction()
van de BlogController
in AppBundle
. De controlleractie ontvangt de waarde van de tijdelijke aanduiding als methodeargument.
Een verzoek voor /blog/my-post
activeert bijvoorbeeld een aanroep van showAction()
met een argument $slug
met de waarde my-post
. Met behulp van dat argument kan de controlleractie de reactie wijzigen afhankelijk van de waarde van de tijdelijke aanduiding, bijvoorbeeld door de blogpost met de slug my-post
uit de database op te halen.
Standaardwaarden voor tijdelijke aanduidingen
Als u een tijdelijke aanduiding wilt die kan worden weggelaten, kunt u deze een standaardwaarde geven:
YAML gebruiken:
# app/config/routing.yml
blog_list:
path: /blog/{page}
defaults: { _controller: AppBundle:Blog:list, page: 1 }
requirements:
page: '\d+'
Annotaties gebruiken:
// 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)
{
// ...
}
}
In dit voorbeeld komen zowel de /blog
als /blog/1
URL's overeen met de blog_list
route en worden ze behandeld met de methode listAction()
. In het geval van /blog
listAction()
nog steeds het argument $page
, met de standaardwaarde 1
.