2012-05-17 5 views
4

경로에서 생성 된 이스케이프 처리되지 않은 URL을 입력 요소에 넣어야합니다.Symfony2 나뭇 가지 그만 이스케이프 경로

routing.yml

profile_delete: 
    pattern: /student_usun/{id} 
    defaults: { _controller: YyyXXXBundle:Profile:delete } 

list.html.twig

<input id="deleteUrl" value="{{ path('profile_delete', {id: '$'}) }}"/> 

결과가 :

<input id="deleteUrl" value="/student_usun/%24"/> 

내가 |raw 필터 시도도 넣어 나뭇 코드 내기 wee {% autoescape false %} 태그와 결과는 동일합니다.

답변

12

Twig에는 url_encode one과 일치하는 url_decode 필터가 제공되지 않으므로 작성해야합니다. SRC에서

/당신의/번들/나뭇 가지/확장/YourExtension.php 다음

<?php 

namespace Your\Bundle\Twig\Extension; 

class YourExtension extends \Twig_Extension 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function getFilters() 
    { 
     return array(
      'url_decode' => new \Twig_Filter_Method($this, 'urlDecode') 
     ); 
    } 

    /** 
    * URL Decode a string 
    * 
    * @param string $url 
    * 
    * @return string The decoded URL 
    */ 
    public function urlDecode($url) 
    { 
     return urldecode($url); 
    } 

    /** 
    * Returns the name of the extension. 
    * 
    * @return string The extension name 
    */ 
    public function getName() 
    { 
     return 'your_extension'; 
    } 
} 

그리고 응용 프로그램/설정/config.yml

services: 
    your.twig.extension: 
     class: Your\Bundle\Twig\Extension\YourExtension 
     tags: 
      - { name: twig.extension } 
에서 서비스 구성에 추가

그리고 사용하십시오!

Error: addFilter() must implement interface Twig_FilterInterface, instance of Twig_Function_Method given 

교체 :

'url_decode' => new \Twig_Function_Method($this, 'urlDecode') 

을하고 오류가 나타날 수

<input id="deleteUrl" value="{{ path('profile_delete', {id: '$'})|url_decode }}"/> 
+1

필터를 작성 중이므로 Twig_Function_Method가 아닌 Twig_Function_Method를 사용해야합니다. – umpirsky

+0

주목 받고 업데이트 됨, 감사합니다 @umpirsky –

+0

"src/HQF/Twig/Extension/UrlDecode.php' 파일의 이름을 지정했습니다. 이 파일에서 클래스 이름을 "UrlDecodeExtension'으로 지정했습니다. 이 클래스에서 함수 "getName()"은 "url_decode_extension"을 반환합니다. ** app/config/config.yml' ** 파일에서'your.twig.extension' 대신'url_decode_twig_extension'을 사용했습니다. 클래스 선언은'HQF \ Twig \ Extension \ UrlDecodeExtension'입니다. 그런 다음 "'치명적인 오류 : Class 'HQF \ Twig \ Extension \ UrlDecodeExtension'이 /[..]/symfony/app/cache/dev/appDevDebugProjectContainer.php 2612 행에 없습니다."라는 오류가 발생했습니다. 어떤 아이디어라도 제발? –

0

당신이 사용하는 경우

new \Twig_Function_Method($this, 'urlDecode')" 

로 :

new \Twig_Filter_Method($this, 'urlDecode')" 

최상위

+0

그래도 작동하지 않으면 http://twig.sensiolabs.org/doc/tags/autoescape.html을 참조하십시오 (약 1 시간 동안 이것을 보았습니다. 필터 확장 등을 작성했습니다). 내 결론은 그 나뭇 가지입니다. 필터가 적용된 후에도 출력을 이스케이프하므로 항상 예 & 대신에 &이 생기므로 템플릿의이 부분을 자동으로 수정해야합니다.희망이 도움이됩니다! – Mike

관련 문제