2011-04-26 2 views
2

Symfony 1.4 뷰에서 왜 일부 변수는 출력을 이스케이프 처리합니까, 그렇지 않은 경우가 있습니까?Symfony - 왜 일부 변수는 출력물을 이스케이프 처리하고, 다른 변수는 출력하지 않습니까?

저는 escaping_strategy = true이고 escaping_method = ESC_SPECIALCHARS입니다.

내가보기에

$this->form = new SearchForm(); 

다음 경우에, $ 형태는 SearchForm 될 것입니다. 또는 모델 객체가 정규 모델 객체로도 전달되는 것 같습니다.

그러나 배열이나 MongoCursor와 같은 다른 변수는 sfOutputEscaper___Decorator 객체로 변형되어 원시 메서드에 직접 액세스 할 수 없습니다. 왜?

나는 원시 변수를 얻은 다음 그 방법을 사용할 수 있음을 이해하지만, 당장 나를 위해 추측하는 게임이며, 실망 스럽다.

답변

3

출력 이스케이프를 건너 뛰는 소수의 클래스가 있습니다 (주로 HTML을 렌더링하기 때문에). 의

sfForm, sfFormField, sfFormFieldSchema, sfModelGeneratorHelper

그래서 개체 또는 출력이 탈출하지 않습니다 이러한 클래스에서 상속 : 기본적으로 sfView.class.php는 안전한 것으로 다음 표시합니다. 당신이 sfView.class.php에서 관련 코드를 보면

, 당신은 또한 당신이 그렇게 좋아하면 안전 등의 추가 클래스를 표시하는 방법을 찾을 수 있습니다 :

sfOutputEscaper::markClassesAsSafe(array('sfForm', 'sfFormField', 'sfFormFieldSchema', 'sfModelGeneratorHelper')); 
+0

아, 감사합니다. 나는 또한 나를 트립하는 것을 본다 ... sfOutputEscaperObjectDecorator가 마술 __call 메쏘드를하고 있는데, 그것은 나를 탈출하지 못한다고 생각하게 만든다. 그러나 count()에 대한 호출은 1을 반환했습니다. 이것은 sfOutputEscaperObjectDecorator가 자체적으로 가지고 있기 때문에 MongoCursor의 count() 메서드를 호출하지 않았기 때문입니다! – matt