2017-05-09 14 views
1

twig/PHP와 함께 사용하는 확장 프로그램이 있습니다.나뭇 가지에서 상위 변수 재정의

내 확장은 다음과 같은 라인을 찾습니다

{% module 'blog' with {'controller':'controllers/posts.php', 'view':'templates/posts.html'} %} 

을 내 토큰을 파서 내부 내가 컨트롤러 (posts.php)의 경로를 검색하고 파일을 포함 -이 모든 작업 괜찮습니다.

"posts.php"파일에서 $ 컨텍스트를 덮어 쓰거나 그렇지 않으면 부모 템플릿의 변수를 덮어 쓰려고합니다. 그러나 $ context가 참조로 전달되지 않아 덮어 쓸 수없는 것 같습니다.

내 (base.html) 템플릿 파일은 다음과 같습니다 (읽기 쉽도록 단축 됨).

<title>{{meta.title}}</title> 
{% block content %} Default content {% endblock %} 

내 index.html을 (base.html 확장 템플릿은) 다음과 같습니다

{% extends 'base.html' %} 
{% block content %} 
{% module 'blog' with {'controller':'controllers/posts.php', 'view':'templates/posts.html'} %} 
{% endblock %} 

내부 "posts.php"나는 실제로입니다 $ 컨텍스트의 최우선을 ((시도)하고 변수 템플릿이 같은)로 렌더링됩니다 :

$context['meta']['title'] = microtime(true); 

그리고 전체 기능을 포장하는 것은 분명히 Slimphp에서 렌더링 방식 (이다 - 간결 간체)

$twig->render('index.html', ['meta'=>['title'=>'Set from slim']]); 

meta.title 변수는 부모 템플릿에서 항상 "슬림하게 설정"됩니다. 시도 할 때마다 무시할 수 없습니다.

나는 컨테이너 클래스를 사용하여 정적으로 변수 가져 오기/설정을 시도했지만 부모를 시도 할 때 항상 원래 "Set from slim"변수 값으로 렌더링됩니다. 나는 핀이 $ context가 나뭇 가지 주변의 참조에 의해 전달되지 않는다는 사실을 지적했다.

분명히 과거에 누군가가이 벽을 치고 주변을 해결 했습니까?

도와주세요! 사전에

감사

편집 :

제안 대답은 질문에 대답하지 않습니다. 템플릿 파일 내부에서 렌더링을 연기하려고 시도 할 때 런타임에 다른 파일의 변수를 무시하고 싶습니다.

+0

[부모 블록 확장 from embed template] (http://stackoverflow.com/questions/42702118/extends-parent-blocks-from-embed-template) – DarkBee

+0

거기에 링크 된 확장 기능을 시청하십시오.그것은 당신에게 방향을 주어야합니다 – DarkBee

+0

고맙지 만 그 템플릿 안에 변수를 설정하려고하지 않습니까? 포함 된 다른 파일에서 설정/덮어 쓰기를 원합니다. –

답변

0

이 작업은 절대 불가능합니다.

결국 템플릿 파일을로드하고 정규 표현식을 사용하여 {% module .... %} 행을 추출하고 컨트롤러를 가져 와서 해당 페이지에 포함 할 컨트롤러의 배열 목록에 캐시 한 후 다음에 대신 다음 코드를 포함하도록 코드를 작성했습니다. 구문 분석 난 그냥 해당보기의 CRC를 (참조를 사용하여 변경된 경우 보려면)를 사용하여 포함 된 목록을 반환하는 포함 된 목록을 반환 할 수 있습니다.