如何在自定义树枝函数中呈现内容?

时间:2014-07-18 12:39:46

标签: php symfony twig

我在一张平面预订表中获取不同来源的价格和预订,如下所示:

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扩展之前,我尝试渲染自定义控制器。但这很慢,因为表中有很多行和列。

2 个答案:

答案 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)
}