gpt4 book ai didi

php - Twig (在 Symfony 中): access template parameters from twig extensions

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:56 24 4
gpt4 key购买 nike

我想从我的 Twig 扩展(过滤器、函数...)访问 Twig 模板参数而不显式传递它。

我的所有 twig 扩展中始终需要一个“displayPreferences”变量,以便更改显示和转换值的方式。

可以将此变量作为模板参数传递,并将其作为我运行的每个 Twig 过滤器/函数的参数传递,但这会使模板难以阅读。

这样的东西会很棒:

/**
* Twig filter (render a date using the user defined format)
*
* @param Date $date
*/
public function renderUserDate ($date) {
// Somehow, get a template parameter, without receiving it as argument
$renderPreference = $this->accessTemplateParameter('displayPreferences');

switch ($renderPreference['dateFormat']) {
// Do something
}
}

最佳答案

你可以定义一个Context-aware Filters :

If you want to access the current context in your filter, set the needs_context option to true; Twig will pass the current context as the first argument to the filter call (or the second one if needs_environment is also set to true):

传递的上下文包括模板中定义的变量。

因此更改过滤器的定义,添加所需的 need_context 参数:

public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'renderUserDate', ,array('needs_context' => true)),
);
}

然后使用作为示例:

/**
* Twig filter (render a date using the user defined format)
*
* @param array $context: injected by twig
* @param Date $date
*/
public function renderUserDate ($context, $date) {
// defined in the template
$renderPreference = $context['displayPreferences'];

switch ($renderPreference['dateFormat']) {
// Do something
}
}

关于php - Twig (在 Symfony 中): access template parameters from twig extensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com