Twig null日期过滤器显示当前日期

Sei*_*yed 2 date symfony twig

根据文件

如果传递给日期过滤器的值为null,则默认情况下将返回当前日期.如果需要空字符串而不是当前日期,请使用三元运算符:

http://twig.sensiolabs.org/doc/2.x/filters/date.html

问题是提供的解决方案需要我们重新访问应用程序中的所有日期并应用三元操作,因为我们永远不想显示今天的日期而不是null.

是否可以覆盖默认日期过滤器?如果是这样,我该如何实现呢.我们正在使用symfony 2.7的树枝

use*_*915 9

从文档中:

如果传递给日期过滤器的值为空,则默认返回当前日期。如果需要空字符串而不是当前日期,请使用三元运算符:

{{ post.published_at is empty ? "" : post.published_at|date("m/d/Y") }}
Run Code Online (Sandbox Code Playgroud)

您可以在https://twig.symfony.com/doc/3.x/filters/date.html检查它


Vev*_*eve 7

文档中所述,您可以覆盖现有过滤器:

要重载已定义的过滤器,测试,运算符,全局变量或函数,请在扩展中重新定义它并尽可能晚地注册它(顺序很重要).

以下是在以下情况下返回空字符串而不是当前日期的代码null:

class DateEmptyIfNull extends Twig_Extension
{
    public function getFilters()
    {
        return array(
            new Twig_Filter('date', array($this, 'dateFilter')),
        );
    }

    public function dateFilter($timestamp, $format = 'F j, Y H:i')
    {
        $result = '';
        if($timestamp !== null)
        {
            $result = parent::dateFilter($timestamp, $format);
        }
        return $result;
    }
}

$twig = new Twig_Environment($loader);
$twig->addExtension(new DateEmptyIfNull());
Run Code Online (Sandbox Code Playgroud)