如何访问 Twig 中的类常量?

在我的实体类中有一些类常量,例如:

class Entity {
const TYPE_PERSON = 0;
const TYPE_COMPANY = 1;
}

在正常的 PHP 我经常做 if($var == Entity::TYPE_PERSON)和我想做这样的东西在细枝。有可能吗?

81328 次浏览
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}

请参阅 constant功能constant测试的文档。

如果需要访问名称空间下的类常量,请使用

\{\{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}

从1.12.1开始,你也可以从对象实例中读取常量:

{% if var == constant('TYPE_PERSON', entity)

如果使用命名空间

\{\{ constant('Namespace\\Entity::TYPE_COMPANY') }}

重要! 使用双斜杠,而不是单斜杠

编辑: 我已经找到了更好的解决方案,请点击这里阅读。



假设你有课:

namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}

创建并注册 Twig 扩展:

class MyClassExtension extends \Twig_Extension
{
public function getName()
{
return 'my_class_extension';
}


public function getGlobals()
{
$class = new \ReflectionClass('MyNamespace\MyClass');
$constants = $class->getConstants();


return array(
'MyClass' => $constants
);
}
}

现在您可以在 Twig 中使用如下常量:

\{\{ MyClass.MY_CONSTANT }}

在《 Symfony 的最佳实践》一书中,有一个章节提到了这个问题:

常量可以用于例如在您的 Twig 模板由于常量()函数:

// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;


class Post
{
const NUM_ITEMS = 10;


// ...
}

在模板树枝中使用这个常量:

<p>
Displaying the \{\{ constant('NUM_ITEMS', post) }} most recent results.
</p>

链接如下: Http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options

几年后,我意识到我以前的答案并不是那么好。我已经创建了更好地解决问题的扩展。它是以开源的形式发布的。

Https://github.com/dpolac/twig-const

它定义了新的 Twig 操作符 #,它允许您通过该类的任何对象访问类常量。

像这样使用它:

{% if entity.type == entity#TYPE_PERSON %}