У меня есть такие маршруты:
user:
path: /u/{id}/{name}
defaults: { _controller: AcmeMyBundle:User:user, name: '' }
requirements:
id: '[0-9]+'
{name} нужен только для того, чтобы иметь красивый URL для пользователей и SEO. Я не использую {name} ни для чего в своем приложении, потому что {id} выполняет всю работу. {name} обычно состоит из нескольких слов (имя + фамилия и т. д.), а сгенерированные URL-адреса выглядят следующим образом:
http://my.project/u/12/Firstname%20LastName
Я генерирую URL-адрес либо в шаблоне веточки с путем ('user', {id: user_id, name: user_name}) или в php с помощью $ this-> get ('router') -> generate (...)
Я бы не хотел использовать% 20 и заменять все пробелы дефисами, чтобы ссылки выглядели так:
http://my.project/u/12/Firstname-LastName
Это выглядит более читабельным и я где-то читал, что гуглу нравятся дефисы больше ...
Лучше всего, если бы генератор маршрутов делал это. Просто замените все пробелы дефисами. В данный момент мне больше ничего не нужно, и это не может ни на что повлиять, потому что {name} или некоторые другие описательные параметры используются только для SEO и не используются в приложении. {id} - важный параметр
Мне не удалось найти способ сделать это красиво по какому-то параметру, поэтому я просто открыл vendor / symfony / symfony / src / Symfony / Component / Routing / Generator / UrlGenerator.php и добавил "% 20 "и пробел перед decodedChars:
protected $decodedChars = array(
# ...
'%2A' => '*',
'%7C' => '|',
# replace spaces with hyphen
'%20' => '-',
' ' => '-'
);
Это работает, но я не очень хорошо себя чувствую с этим решением, потому что я исправляю ядро Symfony. А позже я, возможно, захочу ввести {имя} в нижний регистр или другие параметры по умолчанию.
Есть ли способ лучше? Я бы подумал, что лучший способ администрирования таких вещей - это определить некоторые параметры postSlugify в routing.yml ...
Я мог бы сделать функции getName () и getNameSluggified () в моем объекте User и что-то подобное в других объектах, но должен быть способ автоматизировать это, не создавая n подобных функций в каждом объекте.
findAll()
иpersist()
+flush()
, чтобы обновить все ярлыки за один раз!) Я сделал небольшой командный скрипт, чтобы сделать это за меня. Не знаю, есть ли более простой способ сделать это: / - person Rybus   schedule 07.06.2014