Szukaj…


Wprowadzenie

Trasa przypomina mapowanie adresu URL na akcję (funkcję) w klasie Controller. Poniższy temat skupi się na tworzeniu tras, przekazywaniu parametrów do klasy Controller za pośrednictwem trasy za pomocą YAML lub adnotacji.

Uwagi

Przydatne jest sprawdzenie, co generuje framework Symfony, ten zapewnia narzędzia do śledzenia wszystkich tras konkretnej aplikacji.

Z Symfony Doc użyj (w powłoce):

php bin/console debug:router

Możesz także oglądać wszystkie istotne informacje o trasach w profilerze Framework, w menu routingu: Symfony Profiler

Routing przy użyciu YAML

Konfiguracja routingu jest zawarta w pliku app/config/config.yml , domyślnie w app/config/routing.yml .

Stamtąd możesz połączyć się z własną konfiguracją routingu w pakiecie

# app/config/routing.yml

app:
    resource: "@AppBundle/Resources/config/routing.yml"

Może także zawierać kilka globalnych tras aplikacji.

We własnym pakiecie możesz skonfigurować trasy, które służą dwóm celom:

  • Dopasowywanie do żądania, tak że dla żądania wywoływana jest poprawna akcja.
  • Generowanie adresu URL na podstawie parametrów nazwy i trasy.

Poniżej znajduje się przykładowa konfiguracja trasy YAML:

# 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'"

Trasa nosi nazwę my_page i na myPageAction wywołuje myPageAction z DefaultController w AppBundle . Ma parametr o nazwie parameter o wartości domyślnej. Wartość jest poprawna tylko wtedy, gdy pasuje do wyrażenia regularnego \d+ . W przypadku tej trasy akceptowane są tylko metody HTTP GET i PUT . condition jest wyrażeniem w przykładzie, w którym trasa nie będzie zgodna, chyba że nagłówek User-Agent pasuje do firefox. Możesz wykonać dowolną złożoną logikę w wyrażeniu, wykorzystując dwie zmienne, które są przekazywane do wyrażenia: context (RequestContext) i request (Symfony Request).

Wygenerowana trasa z wartością parametru 10 może wyglądać następująco: /application/content/page/10 .

Routing z wykorzystaniem adnotacji

Konfiguracja routingu jest zawarta w pliku app/config/config.yml , domyślnie w app/config/routing.yml .

Stamtąd możesz połączyć się z kontrolerami, które mają konfigurację routingu z adnotacjami:

# app/config/routing.yml

app:
    resource: "@AppBundle/Controller"
    type:     annotation

We własnym pakiecie możesz skonfigurować trasy, które służą dwóm celom:

  • Dopasowywanie do żądania, tak że dla żądania wywoływana jest poprawna akcja.
  • Generowanie adresu URL na podstawie parametrów nazwy i trasy.

Poniżej znajduje się przykładowa konfiguracja trasy z adnotacjami:

// 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)
    {
        // ...
    }
}

Kontroler jest opatrzony adnotacją o prefiksie trasy, tak że każda skonfigurowana trasa w tym kontrolerze zostanie dodana za pomocą prefiksu.

Skonfigurowana trasa nosi nazwę my_page i na myPageAction funkcję myPageAction . Ma parametr o nazwie parameter o wartości domyślnej. Wartość jest poprawna tylko wtedy, gdy pasuje do wyrażenia regularnego \d+ . W przypadku tej trasy akceptowane są tylko metody HTTP GET i PUT .

Zauważ, że parametr jest wprowadzany do akcji jako parametr funkcji.

Wygenerowana trasa z wartością parametru 10 może wyglądać następująco: /application/content/page/10 .

Potężne trasy odpoczynku

Tradycyjnie routingu można używać do mapowania żądania za pomocą komponentu routingu, który obsługiwał parametry żądania i odpowiedzi przez komponent HttpFoundation .

Ponadto niestandardowy parametr trasy można utworzyć za pomocą FOSRestBundle w celu rozszerzenia domyślnych funkcjonalności komponentu routingu.

Jest to przydatne do tworzenia tras REST, bardzo przydatne do określania sposobu przesyłania danych strukturalnych, takich jak plik XML lub json, w żądaniu (i odpowiedzi).

Zobacz FOSRestBundle Doc, aby uzyskać więcej informacji, a zwłaszcza tę adnotację:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow