Php (细枝)动态生成的参数

Php (细枝)动态生成的参数,php,symfony,Php,Symfony,可以轻松设置所有细枝模板可用的全局静态参数,例如: 但是,比如说,我想在页面的任何地方显示今年的(例如,在页脚中显示版权)-这可以通过以下方式获得,例如在PHP中: date("Y") 现在,如何使它可用于所有细枝模板,而不需要在每个控制器中传递它?您应该创建一个。在该链接中,您可以看到如何创建一个并在Symfony中注册它。它并没有告诉你如何通过它来定义全局,但是这个过程非常简单 咀嚼 基本上,您只需要创建一个扩展\Twig\u Extension的类。然后重写基本扩展类中的默认getGlo

可以轻松设置所有细枝模板可用的全局静态参数,例如:

但是,比如说,我想在页面的任何地方显示今年的(例如,在页脚中显示版权)-这可以通过以下方式获得,例如在PHP中:

date("Y")
现在,如何使它可用于所有细枝模板,而不需要在每个控制器中传递它?

您应该创建一个。在该链接中,您可以看到如何创建一个并在Symfony中注册它。它并没有告诉你如何通过它来定义全局,但是这个过程非常简单

咀嚼 基本上,您只需要创建一个扩展
\Twig\u Extension
的类。然后重写基本扩展类中的默认
getGlobals
方法,并通过该方法提供全局变量:

<?php

namespace MyBundle\Twig;

class MyTwigExtension extends \Twig_Extension
{
    public function getGlobals()
    {
        return [
            'current_year' => (new \DateTime())->format('Y'),
        ];
    }    
}
根据评论更新 如果您需要在代码的其他部分访问该值,可能会有点棘手,有几种方法可以解决这个问题

我的建议是,您创建一项服务,为您提供所需的价值:

<?php

namespace MyBundle\Util;

class CurrentYearProvider
{
    public function getCurrentYear()
    {
        return (new \DateTime())->format('Y');
    }
}
之后,您只需将其注入细枝扩展:

services:
    mybundle.twig.my_twig_extension:
        class: MyBundle\Twig\MyTwigExtension
        arguments: [@current_year_provider]
        tags:
            - { name: twig.extension }
并使用它获取值:

<?php

namespace MyBundle\Twig;

class MyTwigExtension extends \Twig_Extension
{
    private $yearProvider;

    public function __construct(CurrentYearProvider $yearProvider)
    {
        $this->yearProvider = $yearProvider;
    }

    public function getGlobals()
    {
        return [
            'current_year' => $this->yearProvider->getCurrentYear(),
        ];
    }    
}
仅仅一年,是的但是如果你有很多相关的参数,也许(现在我这么认为)相关的方法可能会有所帮助,也许把一个参数变成一个服务并不是一个坏主意。毕竟,全局参数是通过使用服务(容器)来访问的,不是吗。谢谢
services:
    mybundle.twig.my_twig_extension:
        class: MyBundle\Twig\MyTwigExtension
        arguments: [@current_year_provider]
        tags:
            - { name: twig.extension }
<?php

namespace MyBundle\Twig;

class MyTwigExtension extends \Twig_Extension
{
    private $yearProvider;

    public function __construct(CurrentYearProvider $yearProvider)
    {
        $this->yearProvider = $yearProvider;
    }

    public function getGlobals()
    {
        return [
            'current_year' => $this->yearProvider->getCurrentYear(),
        ];
    }    
}
<?php

namespace MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{
    public function myAction()
    {
        $currentYear = $this->get('current_year_provider')->getCurrentYear(); 
    }
}