我有一個擴展,我將它放在twig/PHP中。覆蓋樹枝中的父變量
我的擴展查找類似下面的一行:
{% module 'blog' with {'controller':'controllers/posts.php', 'view':'templates/posts.html'} %}
在我的令牌解析器我擡頭看路的控制器(posts.php)和包括文件 - 這是所有工作的罰款。
在「posts.php」文件中,我想覆蓋$ context或以其他方式覆蓋我擴展的父模板中的變量,但是,似乎$ 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變量始終設置爲「從slim設置」在父模板中,無論我嘗試什麼,我都無法重寫它。
我已經嘗試了晚期靜態綁定,使用容器類靜態獲取/設置變量,但不管我嘗試的父母總是呈現與原始「設置從苗條」變量值。我有針對性地指出這一事實,$上下文不是通過引用繞過樹枝傳遞的。
當然有人過去曾經打過這堵牆,並知道工作?
請幫忙!
在此先感謝
編輯:
建議的回答沒有回答這個問題。它嘗試從模板文件中推遲渲染,我希望在運行時覆蓋來自不同文件的變量。
可能有[Extends parent blocks從嵌入模板](http://stackoverflow.com/questions/42702118/extends-parent-blocks-from-embed-template) – DarkBee
看看我在那裏鏈接的擴展。它應該給你一個方向 – DarkBee
謝謝,但試圖在模板內設置變量不是嗎?我期待從一個不同的包含文件中設置/覆蓋它們 –