gpt4 book ai didi

php - Twig 宏可以返回值吗?

转载 作者:行者123 更新时间:2023-12-01 09:44:35 26 4
gpt4 key购买 nike

我正在尝试在 Twig 中编写模板.在其中,我希望它对来自 Controller 的字符串数据执行一些操作。特别是,有一个常见的操作(从 underscore_case 转换为 CamelCase ),我想把它放到一个单独的函数中。然后我可以像{% set x = magic(a) ~ magic(b) %}一样重复使用它.但是我找不到如何在模板本身内部创建这样一个可重用的功能。有宏,但那些似乎无法返回值。过滤器是另一个似乎符合要求的选项,但我只能在 PHP 端定义它们。

这能做到吗?还是我应该在 Controller 端进行所有高级字符串操作?感觉就像我在那里拉动部分显示逻辑;应该在 View 中的东西。

最佳答案

Twig 用于输出数据。如果您需要“转换”数据,您需要在将其发送到 Twig 之前执行此操作,或者您需要extend twig

理想情况下,您发送到 twig 的所有数据都只是需要最少操作的变量和数组。

当您实际上“在”twig 中时,可以假定数据处理已经“完成”,并且只需要在适当的地方输出,并用最少的逻辑来决定用户界面样式。

因此,在将数据发送到 twig 之前,重新审视您的逻辑并更好地准备数据。

一个扩展工具包类的示例,该类包含我们的魔法方法来实现真正的魔法。

class CustomToolkit 
{
public function magic_a($a)
{
return strtolower($a); }

public function magic_b($b)
{
return camel_case($b);
}

public function magic_tidle($a, $b)
{
return $this->magic_a($a) ~ $this->magic_b($b);
}
}

然后你将它添加到你的 Twig 实例中。我在这里添加了一个完整的实例化循环。如果你有一个服务提供者,你可以从那里获取实例并将其添加到那个实例中。
$twig = new Twig_Environment(new Twig_Loader_Array([
'html' => $contents
]),[
'auto_reload' => true,
'debug' => false,
]);
$twig->addExtension('toolkit', new CustomToolkit ());
echo $twig->render('html', $values);

然后在你的 Twig 代码中,你应该能够做一些事情
{% set x = toolkit.magic_tidle("value","value_b") %} 

关于php - Twig 宏可以返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52296098/

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