我在一张平面预订表中获取不同来源的价格和预订,如下所示:
record 2014-06-07 2014-06-14 2014-06-21 2014-06-28
1 2000.00 2500.00 2500.00 3000.00
array(3) array(null) array(2) array(1)
2 3000.00 3500.00 3500.00 2800.00
array(null) array(1) array(null) array(null)
现在我需要将价格和预订的列渲染成一个漂亮的布局。所以我写了一个自定义枝条扩展,并给他们价格和预订作为参数。
所以我的问题是:如何在树枝扩展中渲染自定义Twig_Function的结果?有时我需要只提供价格,有时我需要在一周内提交价格和3次预订。
在使用twig扩展之前,我尝试渲染自定义控制器。但这很慢,因为表中有很多行和列。
答案 0 :(得分:0)
注入你的枝条扩展模板服务。请参阅example。
您的代码如下所示:
use Symfony\Bundle\TwigBundle\Debug\TimedTwigEngine;
class MenuExtension extends \Twig_Extension
{
/**
* @var TimedTwigEngine
*/
private $templating;
function __construct(TimedTwigEngine $templating)
{
$this->templating = $templating;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('app_prices_bookings', [$this, 'pricesBookings'], ['is_safe' => ['html']]),
];
}
public function pricesBookings($prices, $bookings)
{
$this->templating->render('@App/App/prices_bookings.html.twig', $prices, $bookings);
}
}
应用程序/ config.yml:
app.twig.extension:
class: App\AppBundle\Twig\AppExtension
arguments: ["@templating"]
tags:
- { name: twig.extension }
现在你可以在树枝上使用这个功能了:
{{ app_prices_bookings(prices, bookings) }}
答案 1 :(得分:0)
首先它对我不起作用,因为我得到了一个circularReferenceException。我帮助我注射了现有的Twig Enviroment。所以我的服务定义看起来像
app.twig.extension:
class: App\AppBundle\Twig\AppExtension
arguments: ["@twig"]
tags:
- { name: twig.extension }
构造函数如下所示:
function __construct(\Twig_Environment $environment)
{
$this->environment = $environment;
}
在函数中,我使用
public function myFunction()
{
// logic...
return $this->environment->display(extension, arguments)
}