繁体   English   中英

PHP-在TWIG模板中传递PHP函数

[英]PHP - Passing PHP functions within TWIG templates

我试图找出一种方法,可以在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>" }}

那么是否有解决此类问题的方法?

编辑 (问题编辑后)

不,不可能直接从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简单功能/过滤器的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM