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: Symfony Profiler

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
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow