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

时间:2017-01-09 15:49:27

标签: symfony date twig

根据文件

  

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

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

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

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

3 个答案:

答案 0 :(得分:7)

正如here in the doc所述,您可以覆盖现有的过滤器:

  

重载已定义的过滤器,test,operator,global   变量或函数,在扩展中重新定义它并将其注册为   尽可能晚(订购事项)。

如果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());

答案 1 :(得分:1)

这是Twig 3.0解决方案

扩展类:

namespace Application\Twig\Extensions;

use Twig\Environment;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;

class DateWithFallback extends AbstractExtension
{
    /**
     * @var Environment
     */
    protected $twig;

    /**
     * DateWithFallback constructor.
     *
     * @param Environment $twig
     */
    public function __construct(Environment $twig)
    {
        $this->twig = $twig;
    }

    /**
     * @return array|TwigFilter[]
     */
    public function getFilters(): array
    {
        return [
            new TwigFilter('date', [$this, 'dateFilter']),
        ];
    }

    /**
     * @param string|null $timestamp
     * @param string $fallback
     * @param string $format
     * @return string
     */
    public function dateFilter(?string $timestamp, string $fallback = 'Not set', string $format = 'd/m/Y'): string
    {
        if ($timestamp !== null) {
            return twig_date_format_filter($this->twig, $timestamp, $format);
        }

        return $fallback;
    }
}

假设$this->twig是您的Twig环境,请添加扩展名:

$this->twig->addExtension(new DateWithFallback($this->twig));

答案 2 :(得分:1)

从文档中:

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

{{ post.published_at is empty ? "" : post.published_at|date("m/d/Y") }}

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

进行检查