检查变量是否与嫩枝日期(Check if a variable is a date with Twi

2019-07-18 14:47发布

我的,我想在一个枝条模板来显示一个变量数组,并且每个变量可以是字符串或日期。

如果变量是日期,我想申请的date过滤器是这样的:

{{ my_var|date('d/m/Y') }}

而如果它是一个字符串,我希望它显示它通常的方式:

{{ my_var }}

有什么方法来测试,如果一个变量是一个日期(即PHP的DateTime对象的实例)?

Answer 1:

也许不是最好的方式做到这一点,但我找到了解决我的问题。

{% if my_var.timestamp is defined %}
    {{ my_var|date('m/d/Y') }}
{% else %}
    {{ my_var }}
{% endif %}

作为DateTime PHP对象有一个公共getTimestamp方法,这是一个方法来检查,如果变量是此属性是否设置与否的日期。



Answer 2:

迈克尔的解决方案可在大多数情况下,但有些时候你想有一个通用的解决方案,你应该考虑一些特殊情况。

首先,您测试对于具有物体getTimestamp()方法不必须是一个DateTime的实例。 我可以在许多情况下事情时,时间戳字段将是一个对象是有用的,所以我会测试getTimezone()方法来代替。

其次,如果my_var是具有魔对象__call定义的方法,那么所有的这样的测试会变成阳性。 这就是为什么我建议如下负测试:

{% if my_var.timezone is defined and my_var.nonExistingProperty is not defined %}
    {{ my_var|date('m/d/Y') }}
{% else %}
    {{ my_var }}
{% endif %}

第二个案例是一个我最近,因为使用的Propel ORM对象的挣扎。 基类具有__call映入所有枝条方法is defined测试。



Answer 3:

你可以添加一个class(my_var)功能,例如:

// src/AppBundle/Twig/HelperExtension.php

namespace AppBundle\Twig;

use Twig_Extension;
use Twig_SimpleFunction;

class HelperExtension extends Twig_Extension
{
    public function getFunctions()
    {
        return array(
            new Twig_SimpleFunction('class', array($this, 'getClassName')),
        );
    }

    public function getClassName($object)
    {
        if (!is_object($object)) {
            return null;
        }
        return get_class($object);
    }
}

用法:

{% if class(my_var) == 'DateTime' %}
    ...
{% endif %}


文章来源: Check if a variable is a date with Twig
标签: php twig