2013-09-04 2 views
4

Symfony 2.0에서 2.3으로 업그레이드하는 중입니다. 단일 페이지 앱이 있으므로 해시가 정의 된 경로가 있습니다.Symfony 2.1+는 해쉬/파운드 "#"를 인코딩합니다.

주석을 통해 구성된 경로 :

/** 
* @Route("/app#orders/{id}", name="app_order") 
*/ 

우리는 나뭇 가지 템플릿 내에서이 노선을 이메일을 생성하고 사용하는 나뭇 가지를 사용 업그레이드하기 전에

<a href="{{ url('app_order', { 'id': '123' }) }}">View order</a> 

이 괜찮 았는데. 업그레이드 후 #%23으로 인코딩되지만 슬래시는 그대로 유지됩니다. 물론 이메일에 잘못된 URL이 생성됩니다.

해시 만 인코딩하고 슬래시가 아닌 이유는 무엇입니까? 그것은 전부 또는 무방해야합니다. 문자열 바꾸기 이외의 다른 옵션은 무엇입니까?

상황이 이미 도움이되지 않는 일을 시도했다 : 함께 원료 및 autoescape = false를 사용하여 원시 {{ url(...)|raw }}

  • 를 사용

    • 거짓 {% autoescape false %}
    • 에 autoescape 설정
  • 답변

    4

    UrlGenerator 코드를 살펴보면 rawurlencode 이후에 해시 태그가 디코딩되지 않는다는 것을 알 수 있습니다. 해시 태그의 이스케이프가 커밋 6039569에 추가되었습니다.

    해결 방법으로 UrlGenerator 클래스를 확장하고 $decodedChars 배열을 해시 태그가 포함 된 것으로 바꿀 수 있습니다. 그런 다음 Symfony에게 발전기 클래스를 사용하도록 알려주십시오.

    parameters: 
        router.options.generator_base_class: Acme\MyBundle\Routing\HashtagDecodedUrlGenerator 
    
    +0

    좋은 찾기. Twig에 대한 관심이 적고 Symfony에 대한 관심이 높아진 것 같습니다. – anushr

    +0

    당신이 사용하고있는 버전이 혼란 스럽습니다. 이 커밋은 symfony의 첫 번째 릴리스 (v2.0.0)에 이미 포함되어 있습니다. –

    +0

    우리는 2.0.21에 있으며 해시는 확실히 인코딩되지 않습니다. – anushr

    관련 문제