Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

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

Sign up
Appearance settings

Commite591c59

Browse files
[Routing] Tell about {foo:bar} mapping syntax
1 parentd90c725 commite591c59

File tree

2 files changed

+43
-31
lines changed

2 files changed

+43
-31
lines changed

‎doctrine.rst

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ will automatically fetch them::
680680
/**
681681
* Perform a findOneBy() where the slug property matches {slug}.
682682
*/
683-
#[Route('/product/{slug}')]
683+
#[Route('/product/{slug:product}')]
684684
public function showBySlug(Product $product): Response
685685
{
686686
}
@@ -694,14 +694,17 @@ Automatic fetching works in these situations:
694694
*all* of the wildcards in your route that are actually properties
695695
on your entity (non-properties are ignored).
696696

697-
This behavior is enabled by default on all controllers. If you prefer, you can
698-
restrict this feature to only work on route wildcards called ``id`` to look for
699-
entities by primary key. To do so, set the option
700-
``doctrine.orm.controller_resolver.auto_mapping`` to ``false``.
697+
The ``{slug:product}`` syntax maps the route parameter named ``slug`` to the
698+
controller argument named ``$product``. It also hints the resolver to lookup
699+
by slug when loading the corresponding ``Product`` object from the database.
701700

702-
When ``auto_mapping`` is disabled, you can configure the mapping explicitly for
703-
any controller argument with the ``MapEntity`` attribute. You can even control
704-
the ``EntityValueResolver`` behavior by using the `MapEntity options`_ ::
701+
..versionadded::7.1
702+
703+
Route parameter mapping was introduced in Symfony 7.1.
704+
705+
You can also configure the mapping explicitly for any controller argument
706+
with the ``MapEntity`` attribute. You can even control the
707+
``EntityValueResolver`` behavior by using the `MapEntity options`_ ::
705708

706709
// src/Controller/ProductController.php
707710
namespace App\Controller;
@@ -812,18 +815,6 @@ control behavior:
812815
): Response {
813816
}
814817

815-
``exclude``
816-
Configures the properties that should be used in the ``findOneBy()``
817-
method by *excluding* one or more properties so that not *all* are used::
818-
819-
#[Route('/product/{slug}/{date}')]
820-
public function show(
821-
#[MapEntity(exclude: ['date'])]
822-
Product $product,
823-
\DateTime $date
824-
): Response {
825-
}
826-
827818
``stripNull``
828819
If true, then when ``findOneBy()`` is used, any values that are
829820
``null`` will not be used for the query.

‎routing.rst

Lines 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 ``$post``. 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 learnabout the ``#[MapEntity]`` attribute that can beused tocustomize the
1017-
database queries used to fetch the object from the routeparameter.
1037+
to learnhow to customize the database queriesused tofetch the object from the route
1038+
parameter.
10181039

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp