Skip to content

Commit b3d272d

Browse files
committed
minor #19825 [Routing] Document the effect of setting locale on a route with locale prefixes (nicwortel)
This PR was squashed before being merged into the 5.4 branch. Discussion ---------- [Routing] Document the effect of setting `locale` on a route with locale prefixes When using localized routes and importing a collection of routes, the imported routes can be prefixed with a different prefix for each locale (as documented in [Localized Routes (i18n)](https://symfony.com/doc/current/routing.html#localized-routes-i18n)). This makes it easy to have localized routes for `/en/about-us` and `/nl/over-ons` without having to define multiple routes. This behavior is implemented in the [`Symfony\Component\Routing\Loader\Configurator\Traits\PrefixTrait`](https://github.com/symfony/symfony/blob/7.1/src/Symfony/Component/Routing/Loader/Configurator/Traits/PrefixTrait.php) by replacing the original route with a cloned version for each locale prefix. However, any route which has a default value for the `_locale` parameter [will only be prefixed with the prefix for that locale and will not be cloned for the other locale prefixes](https://github.com/symfony/symfony/blob/39038406d36a4dc1d320ff8d63d9700e7d08045d/src/Symfony/Component/Routing/Loader/Configurator/Traits/PrefixTrait.php#L45-L46). I stumbled upon this because I was trying to implement a route which should be available only for a single locale. I couldn't find any mention of this behavior in the routing documentation. Commits ------- 55215ca [Routing] Document the effect of setting `locale` on a route with locale prefixes
2 parents 5d8e49c + 55215ca commit b3d272d

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

routing.rst

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2416,6 +2416,54 @@ with a locale. This can be done by defining a different prefix for each locale
24162416
;
24172417
};
24182418
2419+
.. tip::
2420+
2421+
If the special :ref:`_locale <routing-locale-parameter>` routing parameter
2422+
is set on any of the imported routes, that route will only be available
2423+
with the prefix for that locale. This is useful when you want to import
2424+
a collection of routes which contains a route that should only exist
2425+
in one of the locales:
2426+
2427+
.. configuration-block::
2428+
2429+
.. code-block:: php-annotations
2430+
2431+
// src/Controller/CompanyController.php
2432+
namespace App\Controller;
2433+
2434+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
2435+
use Symfony\Component\HttpFoundation\Response;
2436+
use Symfony\Component\Routing\Annotation\Route;
2437+
2438+
class CompanyController extends AbstractController
2439+
{
2440+
/**
2441+
* @Route("/about-us/en-only", locale="en", name="about_us")
2442+
*/
2443+
public function about(): Response
2444+
{
2445+
// ...
2446+
}
2447+
}
2448+
2449+
.. code-block:: php-attributes
2450+
2451+
// src/Controller/CompanyController.php
2452+
namespace App\Controller;
2453+
2454+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
2455+
use Symfony\Component\HttpFoundation\Response;
2456+
use Symfony\Component\Routing\Annotation\Route;
2457+
2458+
class CompanyController extends AbstractController
2459+
{
2460+
#[Route('/about-us/en-only', locale: 'en', name: 'about_us')]
2461+
public function about(): Response
2462+
{
2463+
// ...
2464+
}
2465+
}
2466+
24192467
Another common requirement is to host the website on a different domain
24202468
according to the locale. This can be done by defining a different host for each
24212469
locale.

0 commit comments

Comments
 (0)