В Symfony 3.2, в компонент маршрутизации была добавлена поддержка UTF-8 символов в маршрутах. Благодаря этой новой опции, вы можете устанавливать и генерировать маршруты, содержащие UTF-8 символы
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; /** * @Route( * "/category/{name}", * "requirements" = { "name": ".+" }, * "options" = { "utf8": true } * ) */ public function categoryAction($name) { // ... }
В этом маршруте, значение опции utf8 устанавливается как true, что позволяет Symfony рассматривать символ «.», как любой UTF-8 символ ( не только однобайтовый), поэтому следующие URL-адреса будут соответствовать этому маршруту: /category/日本語
, /category/فارسی
, /category/한국어
и т.д. Например, этот вариант также позволяет использовать в качестве URL смайлики.
В Symfony 3.2 нет необходимости устанавливать опцию utf8 специально. Как только Symfony находит символ UTF-8 в настройках маршрута, он будет автоматически включать поддержку в UTF-8:
/** * 'utf8' is set to 'true' automatically because of the * contents of the 'name' requirements: * * @Route( * "/category/{name}", * "requirements" = { "name": "日本語|فارسی" } * ) */ public function categoryAction($name) { // ... }
Однако, если взять себе за правило делать так постоянно, то в дальнейшем это может оказаться устаревшим, и может приводить к LogicException в Symfony 4.0. Поэтому, не забудьте определить опцию utf8 в явном виде, для любого маршрута, который может понадобиться.
В дополнение к UTF-8 символам, компонент маршрутизации также поддерживает все свойства PCRE Unicode, являющиеся управляющими последовательностями, которые соответствуют некоторым общим символьным типам. Например, \p{Lu} соответствует любой символ верхнего регистра на любом языке, \p{Greek} соответствует любой греческий символ, \P{Han} соответствует любому символу, не включенных в китайский Хань и т.д.
Источник: https://symfony.com/blog/new-in-symfony-3-2-unicode-routing-support