Câu trả lời:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Xem tài liệu cho constant
chức năng và constant
kiểm tra .
Chỉ để tiết kiệm thời gian của bạn. Nếu bạn cần truy cập các hằng lớp trong không gian tên, hãy sử dụng
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
Kể từ 1.12.1, bạn cũng có thể đọc các hằng số từ các thể hiện đối tượng:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, bạn có thể thực hiện theo (ngay lập tức lớp Thực thể)$this->render('index.html.twig', ['entity' => new Entity()]);
Chỉnh sửa: Tôi đã tìm thấy giải pháp tốt hơn, đọc về nó ở đây.
Giả sử bạn có lớp:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Tạo và đăng ký tiện ích mở rộng 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
);
}
}
Bây giờ bạn có thể sử dụng các hằng số trong Twig như:
{{ MyClass.MY_CONSTANT }}
constant()
với FQN sẽ gây khó chịu.
Nếu bạn đang sử dụng không gian tên
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Quan trọng! Sử dụng dấu gạch chéo kép, thay vì đơn
Trong cuốn sách thực hành tốt nhất của Symfony có một phần về vấn đề này:
Các hằng số có thể được sử dụng ví dụ trong các mẫu Twig của bạn nhờ hàm hằng ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Và sử dụng hằng số này trong twig mẫu:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Tại đây, liên kết: http://symfony.com/doc/cản/best_practices/configuration.html#constants-vs-configuration-options
Sau một vài năm tôi nhận ra rằng câu trả lời trước đây của tôi không thực sự tốt như vậy. Tôi đã tạo ra phần mở rộng giải quyết vấn đề tốt hơn. Nó được xuất bản dưới dạng nguồn mở.
https://github.com/dpolac/twig-const
Nó định nghĩa toán tử Twig mới #
cho phép bạn truy cập hằng số lớp thông qua bất kỳ đối tượng nào của lớp đó.
Sử dụng nó như thế:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, nếu bạn muốn sử dụng tên lớp thực thể mà không cần khởi tạo đối tượng, NodeExpression
lớp có thể được thay đổi thành tên như thế này, hoạt động với tôi : ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Tất nhiên, điều này giới hạn các lớp của bạn trong App\Entity
không gian tên, nhưng tôi nghĩ rằng nó bao gồm trường hợp sử dụng phổ biến nhất.
{% if var is constant('TYPE_PERSON', object) %}