Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 803d7cc

Browse filesBrowse files
[Routing] Tell about {foo:bar} mapping syntax
1 parent 6e59a25 commit 803d7cc
Copy full SHA for 803d7cc

File tree

1 file changed

+32
-11
lines changed
Filter options

1 file changed

+32
-11
lines changed

‎routing.rst

Copy file name to clipboardExpand all lines: routing.rst
+32-11Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ Creating Routes as Attributes
2222
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2323

2424
PHP attributes allow to define routes next to the code of the
25-
:doc:`controllers </controller>` associated to those routes. Attributes are
26-
native in PHP 8 and higher versions, so you can use them right away.
25+
:doc:`controllers </controller>` associated to those routes.
2726

2827
You need to add a bit of configuration to your project before using them. If your
2928
project uses :ref:`Symfony Flex <symfony-flex>`, this file is already created for you.
@@ -707,12 +706,6 @@ URL Route Parameters
707706
matches any uppercase character in any language, ``\p{Greek}`` matches any
708707
Greek characters, etc.
709708

710-
.. note::
711-
712-
When using regular expressions in route parameters, you can set the ``utf8``
713-
route option to ``true`` to make any ``.`` character match any UTF-8
714-
characters instead of just a single byte.
715-
716709
If you prefer, requirements can be inlined in each parameter using the syntax
717710
``{parameter_name<requirements>}``. This feature makes configuration more
718711
concise, but it can decrease route readability when requirements are complex:
@@ -998,7 +991,7 @@ controller action. Instead of ``string $slug``, add ``BlogPost $post``::
998991
{
999992
// ...
1000993

1001-
#[Route('/blog/{slug}', name: 'blog_show')]
994+
#[Route('/blog/{slug:post}', name: 'blog_show')]
1002995
public function show(BlogPost $post): Response
1003996
{
1004997
// $post is the object whose slug matches the routing parameter
@@ -1012,9 +1005,37 @@ this case), the "param converter" makes a database request to find the object
10121005
using the request parameters (``slug`` in this case). If no object is found,
10131006
Symfony generates a 404 response automatically.
10141007

1008+
The ``{slug:post}`` syntax maps the route parameter named ``slug`` to the controller
1009+
argument named ``$blog``. It also hints the "param converter" to lookup by slug
1010+
when loading the corresponding ``BlogPost`` object from the database.
1011+
1012+
.. versionadded:: 7.1
1013+
1014+
Route parameter mapping was introduced in Symfony 7.1.
1015+
1016+
When more than one entity needs to be derived from route parameters, collisions can happen.
1017+
In the following example, the route tries to define two mappings: one to load an author by
1018+
name, two to load a category by name. But this is not allowed because from the side of the
1019+
route definition, this declares a parameter named "name" twice::
1020+
1021+
#[Route('/search-book/{name:author}/{name:category}')]
1022+
1023+
Such routes should instead be defined using the following syntax::
1024+
1025+
#[Route('/search-book/{authorName:author.name}/{categoryName:category.name}')]
1026+
1027+
This way, the route parameter names are unique (``authorName`` and ``categoryName``) and
1028+
the "param converter" can correctly map them to controller arguments (``$author`` and
1029+
``$category``), loading them both by their name.
1030+
1031+
.. versionadded:: 7.3
1032+
1033+
This more advanced style of route parameter mapping was introduced in Symfony 7.3.
1034+
1035+
More advanced mappings can be achieved using the ``#[MapEntity]`` attribute.
10151036
Check out the :ref:`Doctrine param conversion documentation <doctrine-entity-value-resolver>`
1016-
to learn about the ``#[MapEntity]`` attribute that can be used to customize the
1017-
database queries used to fetch the object from the route parameter.
1037+
to learn how to customize the database queries used to fetch the object from the route
1038+
parameter.
10181039

10191040
Backed Enum Parameters
10201041
~~~~~~~~~~~~~~~~~~~~~~

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.