Если я создаю URL-адрес в Symfony2 с пробелами, например:
example.com/some text
то этот URL-адрес отображается на сайте, как:
example.com/some%20text
Как настроить замену пробелов на плюсы, а не на %20?
В этом случае:
example.com/some+text
Мне нужно общее решение, не добавляя | replace (' %20', '+') во всех URL-адресах.
Я нашел решение, и оно работает для меня. Сначала я создал службу для кодирования/декодирования url. Таким образом, вы str_replace('--the escape character--','+')
в вашем контроллере (используя сервис или другую альтернативу), у вас будет что-то вроде этого:
myRoute:
path: /{argument}
controller: sampleController
Оригинальный URL:
http://example.com/lorem+ipsum
Итак, вот ваш sampleController
получит $argument
следующим образом:
$argument = 'lorem+ipsum';
Здесь вы просто декодируете его:
$theOriginal = str_replace('+','%20',$argument);
Для ветки вы просто добавляете фильтр "Заменить", как если бы вам нужно было отобразить его:
{{ app.request.attributes.get('_route_params')['argument']|replace('+',' --the escape character--')}}
Спасибо всем за ответы, я нашел свое решение.
В MainBundle\Resources\config\services.yml добавлено
parameters:
router.options.generator_base_class: Melofania\MainBundle\UrlGenerator
И создал файл MainBundle\UrlGenerator.php
namespace Melofania\MainBundle;
use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;
class UrlGenerator extends BaseUrlGenerator
{
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
{
$url = parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens);
return str_replace('%20', '+', $url);
}
}
Но обратная процедура пока не решена. Я имею в виду URL с плюсами => параметры маршрута с пробелами в контроллере. Я пытался использовать UrlMatcher, но безуспешно. Если у вас есть ответ, напишите на этой странице: Динамически преобразовывать значения параметров маршрута в Symfony 2