Замените пробелы на плюсы в URL в Symfony2

0

Если я создаю URL-адрес в Symfony2 с пробелами, например:

example.com/some text

то этот URL-адрес отображается на сайте, как:

example.com/some%20text

Как настроить замену пробелов на плюсы, а не на %20?

В этом случае:

example.com/some+text

Мне нужно общее решение, не добавляя | replace (' %20', '+') во всех URL-адресах.

  • 1
    Вы url построены с каким-то слагом из db-контента? Если да, то вы должны использовать slugify. Пакет, который реализует это: github.com/cocur/slugify
  • 0
    (Вам не нужно использовать HTML для форматирования примеров кода здесь, в переполнении стека. Просто убедитесь, что ваш код имеет разрыв строки до и после, согласно моему редактированию).
Показать ещё 2 комментария
Теги:
url

2 ответа

0

Я нашел решение, и оно работает для меня. Сначала я создал службу для кодирования/декодирования 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--')}}
0

Спасибо всем за ответы, я нашел свое решение.

В 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню