如何访问 Twig 中的类常量?

发布于 2024-12-07 07:07:27 字数 214 浏览 1 评论 0原文

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

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

在普通的 PHP 中,我经常做 if($var == Entity::TYPE_PERSON) 并且我想在 Twig 中做这种事情。是否可以?

I have a few class constants in my entity class, e.g.:

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

In normal PHP I often do if($var == Entity::TYPE_PERSON) and I would like to do this kind of stuff in Twig. Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

甜是你 2024-12-14 07:07:27

只是为了节省您的时间。如果需要访问命名空间下的类常量,请使用

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

Just to save your time. If you need to access class constants under namespace, use

{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
呢古 2024-12-14 07:07:27
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}

请参阅 constant 函数常量测试

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

See documentation for the constant function and the constant test.

玩套路吗 2024-12-14 07:07:27

从 1.12.1 开始,您还可以从对象实例读取常量:

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

As of 1.12.1 you can read constants from object instances as well:

{% if var == constant('TYPE_PERSON', entity)
温柔女人霸气范 2024-12-14 07:07:27

如果您使用命名空间

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

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

If you are using namespaces

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

Important! Use double slashes, instead of single

沙沙粒小 2024-12-14 07:07:27

编辑:我找到了更好的解决方案,在此处阅读相关内容。



假设您有课程:

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 }}

Edit: I've found better solution, read about it here.



Let's say you have class:

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

Create and register Twig extension:

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
        );
    }
}

Now you can use constants in Twig like:

{{ MyClass.MY_CONSTANT }}
回忆凄美了谁 2024-12-14 07:07:27

在《Symfony 最佳实践》一书中,有一个章节涉及这个问题:

借助constant()函数,常量可以在Twig模板中使用:

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

class Post
{
    const NUM_ITEMS = 10;

   // ...
}

并在模板 twig 中使用此常量:

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

这里是链接:
http://symfony.com/doc/current/best_practices /configuration.html#constants-vs-configuration-options

In book best practices of Symfony there is a section with this issue:

Constants can be used for example in your Twig templates thanks to the constant() function:

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

class Post
{
    const NUM_ITEMS = 10;

   // ...
}

And use this constant in template twig:

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

Here the link:
http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options

忘你却要生生世世 2024-12-14 07:07:27

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

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

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

像这样使用它:

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

After some years I realized that my previous answer is not really so good. I have created extension that solves problem better. It's published as open source.

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

It defines new Twig operator # which let you access the class constant through any object of that class.

Use it like that:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文