2012-07-30 4 views
0

я следующий маршрут в моей пачкеSymfony2. Проблемы с настраиваемыми URL-адресами. Urlencoding

/{category} 

И у меня есть категория с именем

Category/Brand 

Если URL-то вроде этого:

domain.com/Company/Brand 

тогда я получаю ошибку 500 о/символ.

Но если в веточке я

company.name|url_encode() 

тогда я получаю

Company%2F%Brand 

(код может быть неправильным, не помню сейчас)

Но все же Symfony говорит мне, что есть нет соответствия маршрутов

И дает мне 404.

Как я могу решить эту проблему?

+0

Не могли бы вы указать текст ошибки 500? –

ответ

0

Хорошо!

Я нашел решение here.

 

    #PUBLICATION URL 
    ###_publication: 
     pattern: /{username}/{category}/{publicationid} 
     defaults: { _controller: ###:Default:publication } 
     requirements: 
      _method: GET 
      category: .+ 
      username: .+ 
      publicationid: \d+        
    #CATEGORY - should be at very end, to match all other URLS 
    ###_category: 
     pattern: /{category} 
     defaults: { _controller: ###:Default:category } 
     requirements: 
      _method: GET 
      category: .+ 


0

Если ваш маршрут является/{category}, а URL, который вы вводите, является domain.com/Company/Brand, ошибка является нормальной.

Вы должны конфиг свой маршрут в routing.yml как это:

Company/{category} 
+0

Мне нужен именно домен.com/company/brand или фирменный бренд %%%% или что-то в этом роде. –

1

ли все ваши имена категорий, как, что одна или только некоторые из них?

Если все они следуют этой структуры, вы можете изменить маршрут к:

/{company}/{brand} 

И изменить соответствующий контроллер принять две переменные вместо одного. Позже вы можете связать их или сделать все, что вам нужно, с ними

Если только некоторые из них имеют эту структуру, вы можете попытаться заменить разделитель каталогов некоторой комбинацией символов в контроллере, которая создает ссылку, а затем отменит эту замену в контроллер для этого маршрута. Например, в контроллере для шаблона, где ссылка показана можно

$nameEncoded = str_replace ('/','%%%%',$companyName); 

передача этой переменной в шаблон и использовать его для создания ссылки, а затем в принимающем контроллере сделать:

$nameDecoded = str_replace ('%%%%','/',$companyName); 
Смежные вопросы