@@ -1308,15 +1308,18 @@ A possible solution is to change the parameter requirements to be more permissiv
13081308Route Aliasing
13091309--------------
13101310
1311- Route alias allow you to have multiple name for the same route:
1311+ Route alias allows you to have multiple names for the same route
1312+ and can be used to provide backward compatibility for routes that
1313+ have been renamed. Let's say you have a route called ``product_show ``:
13121314
13131315.. configuration-block ::
13141316
13151317 .. code-block :: yaml
13161318
13171319 # config/routes.yaml
1318- new_route_name :
1319- alias : original_route_name
1320+ product_show :
1321+ path : /product/{id}
1322+ controller : App\Controller\ProductController::show
13201323
13211324 .. code-block :: xml
13221325
@@ -1327,7 +1330,7 @@ Route alias allow you to have multiple name for the same route:
13271330 xsi : schemaLocation =" http://symfony.com/schema/routing
13281331 https://symfony.com/schema/routing/routing-1.0.xsd" >
13291332
1330- <route id =" new_route_name " alias = " original_route_name " />
1333+ <route id =" product_show " path = " /product/{id} " controller = " App\Controller\ProductController::show " />
13311334 </routes >
13321335
13331336 .. code-block :: php
@@ -1336,38 +1339,101 @@ Route alias allow you to have multiple name for the same route:
13361339 use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
13371340
13381341 return static function (RoutingConfigurator $routes): void {
1339- $routes->alias('new_route_name', 'original_route_name');
1342+ $routes->add('product_show', '/product/{id}')
1343+ ->controller('App\Controller\ProductController::show');
13401344 };
13411345
1342- In this example, both ``original_route_name `` and ``new_route_name `` routes can
1346+ Now, let's say you want to create a new route called ``product_details ``
1347+ that acts exactly the same as ``product_show ``.
1348+
1349+ Instead of duplicating the original route, you can create an alias for it.
1350+
1351+ .. configuration-block ::
1352+
1353+ .. code-block :: yaml
1354+
1355+ # config/routes.yaml
1356+ product_show :
1357+ path : /product/{id}
1358+ controller : App\Controller\ProductController::show
1359+
1360+ product_details :
1361+ # "alias" option refers to the name of the route declared above
1362+ alias : product_show
1363+
1364+ .. code-block :: xml
1365+
1366+ <!-- config/routes.xml -->
1367+ <?xml version =" 1.0" encoding =" UTF-8" ?>
1368+ <routes xmlns =" http://symfony.com/schema/routing"
1369+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
1370+ xsi : schemaLocation =" http://symfony.com/schema/routing
1371+ https://symfony.com/schema/routing/routing-1.0.xsd" >
1372+
1373+ <route id =" product_show" path =" /product/{id}" controller =" App\Controller\ProductController::show" />
1374+ <!-- "alias" attribute value refers to the name of the route declared above -->
1375+ <route id =" product_details" alias =" product_show" />
1376+ </routes >
1377+
1378+ .. code-block :: php
1379+
1380+ // config/routes.php
1381+ use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
1382+
1383+ return static function (RoutingConfigurator $routes): void {
1384+ $routes->add('product_show', '/product/{id}')
1385+ ->controller('App\Controller\ProductController::show');
1386+ // second argument refers to the name of the route declared above
1387+ $routes->alias('product_details', 'product_show');
1388+ };
1389+
1390+ In this example, both ``product_show `` and ``product_details `` routes can
13431391be used in the application and will produce the same result.
13441392
13451393.. _routing-alias-deprecation :
13461394
13471395Deprecating Route Aliases
13481396~~~~~~~~~~~~~~~~~~~~~~~~~
13491397
1350- If some route alias should no longer be used (because it is outdated or
1351- you decided not to maintain it anymore), you can deprecate its definition:
1398+ Route aliases can be used to provide backward compatibility for routes that
1399+ have been renamed.
1400+
1401+ Now, let's say you want to replace the ``product_show `` route in favor of
1402+ ``product_details `` and mark the old one as deprecated.
1403+
1404+ In the previous example, the alias ``product_details `` was pointing to
1405+ ``product_show `` route.
1406+
1407+ To mark the ``product_show `` route as deprecated, you need to "switch" the alias.
1408+ The ``product_show `` become the alias, and will now point to the ``product_details `` route.
1409+ This way, the ``product_show `` alias could be deprecated.
13521410
13531411.. configuration-block ::
13541412
13551413 .. code-block :: yaml
13561414
1357- new_route_name :
1358- alias : original_route_name
1415+ # Move the concrete route definition under ``product_details``
1416+ product_details :
1417+ path : /product/{id}
1418+ controller : App\Controller\ProductController::show
1419+
1420+ # Define the alias and the deprecation under the ``product_show`` definition
1421+ product_show :
1422+ alias : product_details
13591423
13601424 # this outputs the following generic deprecation message:
1361- # Since acme/package 1.2: The "new_route_name " route alias is deprecated. You should stop using it, as it will be removed in the future.
1425+ # Since acme/package 1.2: The "product_show " route alias is deprecated. You should stop using it, as it will be removed in the future.
13621426 deprecated :
13631427 package : ' acme/package'
13641428 version : ' 1.2'
13651429
1366- # you can also define a custom deprecation message (%alias_id% placeholder is available)
1430+ # or
1431+
1432+ # you can define a custom deprecation message (%alias_id% placeholder is available)
13671433 deprecated :
13681434 package : ' acme/package'
13691435 version : ' 1.2'
1370- message : ' The "%alias_id%" route alias is deprecated. Do not use it anymore .'
1436+ message : ' The "%alias_id%" route alias is deprecated. Please use "product_details" instead .'
13711437
13721438 .. code-block :: xml
13731439
@@ -1377,35 +1443,46 @@ you decided not to maintain it anymore), you can deprecate its definition:
13771443 xsi : schemaLocation =" http://symfony.com/schema/routing
13781444 https://symfony.com/schema/routing/routing-1.0.xsd" >
13791445
1380- <route id =" new_route_name" alias =" original_route_name" >
1446+ <!-- Move the concrete route definition under ``product_details`` -->
1447+ <route id =" product_details" path =" /product/{id}" controller =" App\Controller\ProductController::show" />
1448+
1449+ <!-- Define the alias and the deprecation under the ``product_show`` definition -->
1450+ <route id =" product_show" alias =" product_details" >
13811451 <!-- this outputs the following generic deprecation message:
1382- Since acme/package 1.2: The "new_route_name " route alias is deprecated. You should stop using it, as it will be removed in the future. -->
1452+ Since acme/package 1.2: The "product_show " route alias is deprecated. You should stop using it, as it will be removed in the future. -->
13831453 <deprecated package =" acme/package" version =" 1.2" />
13841454
1385- <!-- you can also define a custom deprecation message (%alias_id% placeholder is available) -->
1455+ <!-- or -->
1456+
1457+ <!-- you can define a custom deprecation message (%alias_id% placeholder is available) -->
13861458 <deprecated package =" acme/package" version =" 1.2" >
1387- The "%alias_id%" route alias is deprecated. Do not use it anymore .
1459+ The "%alias_id%" route alias is deprecated. Please use "product_details" instead .
13881460 </deprecated >
13891461 </route >
13901462 </routes >
13911463
13921464 .. code-block :: php
13931465
1394- $routes->alias('new_route_name', 'original_route_name')
1466+ $routes->add('product_details', '/product/{id}')
1467+ ->controller('App\Controller\ProductController::show');
1468+
1469+ $routes->alias('product_show', 'product_details')
13951470 // this outputs the following generic deprecation message:
1396- // Since acme/package 1.2: The "new_route_name " route alias is deprecated. You should stop using it, as it will be removed in the future.
1471+ // Since acme/package 1.2: The "product_show " route alias is deprecated. You should stop using it, as it will be removed in the future.
13971472 ->deprecate('acme/package', '1.2', '')
13981473
1399- // you can also define a custom deprecation message (%alias_id% placeholder is available)
1474+ // or
1475+
1476+ // you can define a custom deprecation message (%alias_id% placeholder is available)
14001477 ->deprecate(
14011478 'acme/package',
14021479 '1.2',
1403- 'The "%alias_id%" route alias is deprecated. Do not use it anymore .'
1480+ 'The "%alias_id%" route alias is deprecated. Please use "product_details" instead .'
14041481 )
14051482 ;
14061483
1407- In this example, every time the ``new_route_name `` alias is used, a deprecation
1408- warning is triggered, advising you to stop using that alias .
1484+ In this example, every time the ``product_show `` alias is used, a deprecation
1485+ warning is triggered, advising you to stop using this route and prefer using `` product_details `` .
14091486
14101487The message is actually a message template, which replaces occurrences of the
14111488``%alias_id% `` placeholder by the route alias name. You **must ** have
0 commit comments