[英]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.