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