2017-11-07 4 views
1

In meiner Anwendung verwende ich die Symfony Twig-Erweiterungsfunktion path, um eine Verknüpfung zu einer anderen Route zu erstellen. Dieser Weg nimmt einen Parameter, so schrieb ich meinen Pfad-Funktion wie folgt aus:Codierungsparameter in der Symfony-Pfadzweigfunktion

<a href="{{ path('r', {p: p}) }}">...</a> 

In einigen Fällen kann der angegebene Wert p einen Schrägstrich enthält und Symfony schlägt mit dem Fehler:

"Parameter "p" for route "r" must match "[^/]++" (".../..." given) to generate a corresponding URL.")

Ich würde erwarten, Symfony damit umgehen und URL automatisch diese Werte kodieren, aber anscheinend nicht (oder mache ich etwas falsch).

Auf jeden Fall gelang es mir, dass mit dem url_encode Zweig Filter zu beheben, etwa so:

<a href="{{ path('r', {p: p|url_encode}) }}">...</a> 

Jetzt in meinem Controller, ich akzeptiere diese Parameter wie folgt:

/** 
* @Route("https://stackoverflow.com/a/b/{p}", name="r") 
**/ 
public function someAction($p) { 
    // ... 
} 

Und anscheinend Symfony tut URL entschlüsseln nicht automatisch diesen Wert $p, was ich auch erwarten würde.

Mache ich hier etwas falsch oder ist es wirklich notwendig, die URL-Kodierung/Dekodierung selbst zu handhaben? In den Symfony-Dokumenten finde ich dazu keinerlei Details.

+1

Haben Sie diese Frage hier zu sehen: https://stackoverflow.com/questions/31331489/symfony-handling-slashes-on-url-parameters –

+1

Das ist es, dank @ MohamedBenHENDA. – Koen

Antwort

1

Offenbar erlauben die Standardparametereinschränkungen keine Schrägstriche. Nach dem „Lösen“ sie es funktioniert:

/** 
* @Route("https://stackoverflow.com/a/b/{p}", name="r", requirements={"diagramResourceId"=".+"}) 
**/ 
public function someAction($p) { 
    // ... 
} 
Verwandte Themen