您不能在 twig 模板中直接调用 PHP。您需要创建一个过滤器或函数来执行您正在查找的操作。
$twig = new Twig_Environment($loader, $params);
$twigFunction = new Twig_SimpleFunction('MyStaticClass', function($method) {
MyStaticClass::$method
});
$twig->addFunction($twigFunction);
然后在你的树枝模板中做:
{{ MyStaticClass('getData') }}
当然,上面的例子假设MyStaticClass 在你所在的地方的范围内。
Symfony 示例
您必须创建树枝扩展。下面的例子:
namespace PurpleNeve\Web\PNWebBundle\Extensions;
use PurpleNeve\Web\PNWebBundle\DependencyInjection\CurrencyConverter;
class TwigCurrency extends \Twig_Extension
{
private $converter;
public function __construct(CurrencyConverter $converter)
{
$this->converter = $converter;
}
public function getName()
{
return 'currency';
}
public function getFilters()
{
return array(
'convertCurrency' => new \Twig_Filter_Method($this, 'getConversionBetween')
);
}
public function getConversionBetween($amount, $isoFrom, $isoTo="USD")
{
try {
$value = $this->converter->convertAmount($amount, $isoFrom, $isoTo);
return round($value,2);
} catch(\Exception $e) {
return "?";
}
}
}
这是我创建的扩展程序示例,用于在 twig 中将货币从一种货币转换为另一种货币。
要实现它,你需要在你的 services.yml 中为它创建一个服务对象
parameters:
currency_converter.class: PurpleNeve\Web\PNWebBundle\DependencyInjection\CurrencyConverter
services:
currency_converter:
class: "%currency_converter.class%"
arguments : [@doctrine.orm.entity_manager]
twig.extension.currency:
class: PurpleNeve\Web\PNWebBundle\Extensions\TwigCurrency
tags:
- { name: 'twig.extension' }
arguments : [ @currency_converter ]
然后如上所述,在 twig 中,我可以使用 {{ convertCurrency(55505, 'CAD', 'USD) }} 调用该类和函数