【问题标题】:PHP - Passing PHP functions within TWIG templatesPHP - 在 TWIG 模板中传递 PHP 函数
【发布时间】:2015-07-13 20:56:53
【问题描述】:

我正在尝试找出一种方法,可以直接在 TWIG 的模板中传递 PHP 代码,而无需为每个函数创建单独的扩展。基本上是一个简单的函数,可以解析出 PHP 并在模板中运行代码。

例子:

$function = new Twig_SimpleFunction('php_parse_function', function () {
     //parse php code here
});
$twig->addFunction($function);

用例示例:

{{ php_parse_function | php code }}

这样做的问题是我必须在一个字符串中包含整个代码块,即打印封装在另一个字符串中的 html,该字符串将在另一层引号中具有类/其他属性。

例子:

{{php_parse_function | "echo '<section class=\'Yo\' id=\'2\'>'</section>" }}

那么有这样的解决方法吗?

【问题讨论】:

标签: php twig template-engine


【解决方案1】:

编辑(问题编辑后)

不,直接从 Twig 执行 php 代码是不可能的。您可以创建过滤器或函数并将字符串作为 arg 传递。

怎么样?这样(原始答案):


控制器内您正在加载 Twig 的任何位置:

// ...
$twig = new Twig_Environment($loader, $params); // load Twig env
$tsf = new Twig_SimpleFunction('fooTwig', function ($str) {
    return eval($str);
});
$twig->addFunction($tsf);
// ...

那么:

{{ fooTwig('echo "Hello, World! What kind of sorcery is this? F in hex is "; echo hexdec("F");') }}

记住你也可以使用过滤器!

控制器:

// ...
$twig = new Twig_Environment($loader, $params); // load Twig env
$tsf = new Twig_SimpleFilter('fooTwig', function ($str, $fn) {
    $args = array_merge(array($str), array_slice(func_get_args(), 2));
    return call_user_func_array($fn, $args);
});
$twig->addFilter($tsf);
// ...

那么:

{{ 'F'|fooTwig('hexdec') }}

如果你使用的是 Symfony2 或任何其他框架,是同样的逻辑。您应该只调查在何处添加 Twig 简单函数/过滤器。

【讨论】:

  • 这个问题是,如果我尝试使用类似 {{ fooTwig(
    }} 它不会读取类的位置,因为它无法解析引号。
  • 你为什么要向php发送一个div???顺便说一句,这完全有效:{{ fooTwig('echo \'&lt;div class="ONE"&gt;&lt;/div&gt;\';') }}
  • @viarnes 我知道我可以这样做,但那是添加另一层引号,这是我试图避免做的。我希望代码能够正常解析,而不必封装。
  • 好的。不,那是不可能的。你为什么将html发送到php?我确定您的问题必须有解决方法。
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 2012-12-25
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2018-09-18
相关资源
最近更新 更多