如何在树枝中设置if子句?

How to set if clause in twig?

我有这两个功能:

function is_expired($object) {
              if (new DateTime('NOW') > $object) {
                  return true;
              } else {
                  return false;
              }
}

function is_not_started($object) {
              if (new DateTime('NOW') < $object) {
                  return false;
              } else {
                  return true;
              }
}

$object 是从数据库中获取的 Datetime 对象。并且我还将函数注册为树枝过滤器。

投票系统我有两个字段start_date和expiry_date,我想看看这个是不是已经过期了,但是已经开始了。

在树枝中我有:

{% if (category.endVote|is_expired == false) or (category.startVote|is_not_started == true) %}
<td><a href="voting.php?id={{ category.id }}">{{ category.categoryName|e }}</a></td>
{% else %}
<td>{{ category.categoryName|e }}</td>
{% endif %}

我的意思是,只有在启动且未过期时,我才希望看到 categoryName 为 link。但它没有按预期工作。我在 if 子句中做错了什么?

这是我推荐的。

function can_vote($object) {
    $now = new \DateTime('now');
    return $object->getEndVote() < $now && $object->getStartVote() > $now;
}

{% if category|can_vote is same as(true) %}
    <td><a href="voting.php?id={{ category.id }}">{{ category.categoryName|e }}</a></td>
{% else %}
    <td>{{ category.categoryName|e }}</td>
{% endif %}

不要使用两个单独的函数,而是将它们合并为一个并传入整个类别对象。同样在树枝部分,我建议使用更严格的等式而不是“==”,我的代码中等同于“===”。 记下 getEndVote() 和 getStartVote() getter 方法,如果您使用 public 属性,请更改它们以反映正确的名称。

如果您最终希望使用两种不同的方法,提取该功能并不困难,但我认为这是一个更好的解决方案。