如何在Symfony2中设置Twig模板的默认日期格式?

时间:2012-03-27 08:43:44

标签: symfony twig

Twig文档介绍了如何设置date过滤器的默认日期格式:

$twig = new Twig_Environment($loader);
$twig->getExtension('core')->setDateFormat('d/m/Y', '%d days');

如何在Symfony2中全局进行此设置?

6 个答案:

答案 0 :(得分:19)

有关更详细的解决方案。

在您的包中

创建一个可以包含事件监听器的服务文件夹

namespace MyApp\AppBundle\Services;

use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class TwigDateRequestListener
{
    protected $twig;

    function __construct(\Twig_Environment $twig) {
        $this->twig = $twig;
    }

    public function onKernelRequest(GetResponseEvent $event) {
        $this->twig->getExtension('core')->setDateFormat('Y-m-d', '%d days');
    }
}

然后我们希望symfony找到这个监听器。 在Resources/config/services.yml文件中放置

services:
    twigdate.listener.request:
        class: MyApp\AppBundle\Services\TwigDateRequestListener
        arguments: [@twig]
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

通过将@twig指定为参数,它将被注入TwigDateRequestListener

确保您导入app/config.yml

顶部的services.yml
imports:
    - { resource: @MyAppAppBundle/Resources/config/services.yml }

现在您应该能够跳过日期过滤器中的格式

{{ myentity.dateAdded|date }}

它应该从服务中获取格式。

答案 1 :(得分:12)

从Symfony 2.7开始,您可以在config.yml中全局配置默认日期格式:

# app/config/config.yml
twig:
    date:
        format: d.m.Y, H:i:s
        interval_format: '%%d days'
        timezone: Europe/Paris

number_format过滤器也是如此。详情请见:http://symfony.com/blog/new-in-symfony-2-7-default-date-and-number-format-configuration

答案 2 :(得分:2)

在控制器中你可以做到

$this->get('twig')->getExtension('core')->setDateFormat('d/m/Y', '%d days');

答案 3 :(得分:1)

对于Symfony 4,您可以针对需要的人这样做。

twig:
    ...
    date:
        format: c
        timezone: UTC
    ....

答案 4 :(得分:0)

至少在我的 Twig 安装(无框架)中不存在名为“core”的扩展,我不得不使用 Twig_Extension_Core

$twig->getExtension('Twig_Extension_Core')->setDateFormat($dateFormat);

在 Twig 版本 v2.14.6

中测试

答案 5 :(得分:-1)

可在以下位置找到全局Twig配置选项:

http://symfony.com/doc/2.0/reference/configuration/twig.html

在我看来,应该在这里添加'date_format'选项,因为使用Sonata Intl包对大多数用户来说都是过度的。