Zoeken…
Invoering
Een route is als het toewijzen van een URL aan een actie (functie) in een Controller-klasse. Het volgende onderwerp zal zich richten op het maken van routes, het doorgeven van parameters aan de Controller-klasse via een route met behulp van YAML of annotatie.
Opmerkingen
Het is handig om te zien wat wordt gegenereerd door het Symfony-framework. Deze biedt tools om alle routes van een specifieke applicatie te bekijken.
Gebruik in de Symfony Doc (in een shell):
php bin/console debug:router
U kunt ook alle relevante route-informatie bekijken in de Framework-profiler in het routingmenu:
Routering met YAML
De routeringsconfiguratie is opgenomen in uw app/config/config.yml
bestand, standaard het app/config/routing.yml
bestand.
Van daaruit kunt u een koppeling maken naar uw eigen routeringsconfiguratie
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
Het kan ook verschillende globale routes van applicaties bevatten.
In uw eigen bundel kunt u routes configureren die twee doelen dienen:
- Overeenkomen met een verzoek, zodat de juiste actie voor het verzoek wordt gevraagd.
- Een URL genereren op basis van de naam en routeparameters.
Hieronder ziet u een voorbeeld van een YAML-routeconfiguratie:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
De route heet my_page
en roept de myPageAction
van de DefaultController
in de AppBundle
wanneer daarom wordt gevraagd. Het heeft een parameter, genaamd parameter
met een standaardwaarde. De waarde is alleen geldig als deze overeenkomt met de regex \d+
. Voor deze route worden alleen de HTTP-methoden GET
en PUT
geaccepteerd. De condition
is een uitdrukking in het voorbeeld, de route komt niet overeen tenzij de header User-Agent overeenkomt met firefox. U kunt elke complexe logica uitvoeren die u nodig hebt in de uitdrukking door twee variabelen te gebruiken die aan de uitdrukking worden doorgegeven: context
(RequestContext) en request
(Symfony Request).
Een gegenereerde route met de parameterwaarde 10 kan er uitzien als /application/content/page/10
.
Routering met annotaties
De routeringsconfiguratie is opgenomen in uw app/config/config.yml
bestand, standaard het app/config/routing.yml
bestand.
Van daaruit kunt u een koppeling maken naar de controllers met geannoteerde routingconfiguratie:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
In uw eigen bundel kunt u routes configureren die twee doelen dienen:
- Overeenkomen met een verzoek, zodat de juiste actie voor het verzoek wordt gevraagd.
- Een URL genereren op basis van de naam en routeparameters.
Hieronder staat een voorbeeld van een geannoteerde routeconfiguratie:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
De controller is geannoteerd met een prefixroute , zodat elke geconfigureerde route in deze controller wordt voorafgegaan met behulp van het prefix.
De geconfigureerde route heet my_page
en roept de functie myPageAction
aan wanneer daarom wordt gevraagd. Het heeft een parameter, genaamd parameter
met een standaardwaarde. De waarde is alleen geldig als deze overeenkomt met de regex \d+
. Voor deze route worden alleen de HTTP-methoden GET
en PUT
geaccepteerd.
Merk op dat de parameter als een functieparameter in de actie wordt geïnjecteerd.
Een gegenereerde route met de parameterwaarde 10 kan er uitzien als /application/content/page/10
.
Krachtige rustroutes
Traditioneel kunt u routing gebruiken om een aanvraag toe te wijzen aan de Routing Component die aanvraag- en antwoordparameters door HttpFoundation Component heeft afgehandeld .
Bovendien kan een aangepaste routeparameter worden gemaakt met behulp van de FOSRestBundle om de standaardfunctionaliteit van de routeringscomponent uit te breiden.
Dit is handig voor het maken van REST-routes, echt handig om te specificeren hoe gestructureerde gegevens zoals XML- of json-bestanden in een verzoek (en een antwoord) moeten worden overgedragen.
Zie FOSRestBundle Doc voor meer informatie, en vooral deze annotatie:
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/