Eu tenho algumas constantes de classe na minha classe de entidade, por exemplo:
class Entity {
const TYPE_PERSON = 0;
const TYPE_COMPANY = 1;
}
No PHP normal, costumo fazer if($var == Entity::TYPE_PERSON)
e gostaria de fazer esse tipo de coisa no Twig. É possível?
{% if var is constant('TYPE_PERSON', object) %}
Apenas para economizar seu tempo. Se você precisar acessar constantes de classe no namespace, use
fonte
{% if var == object.MY_CONSTANT %}
A partir da versão 1.12.1, você também pode ler constantes de instâncias de objetos:
fonte
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc ){{ constant('TYPE_PERSON', entity) }}
, é possível fazer a seguir (instanciar a classe Entity)$this->render('index.html.twig', ['entity' => new Entity()]);
Edit: Encontrei uma solução melhor, leia aqui.
Digamos que você tenha aula:
Crie e registre a extensão Twig:
Agora você pode usar constantes no Twig como:
fonte
constant()
com FQN seria incômodo.Se você estiver usando espaços para nome
Importante! Use barras duplas, em vez de simples
fonte
Nas práticas recomendadas para livros do Symfony, há uma seção com este problema:
E use essa constante no modelo galho:
Aqui o link: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
fonte
Depois de alguns anos, percebi que minha resposta anterior não é realmente tão boa. Eu criei uma extensão que resolve melhor o problema. É publicado como código aberto.
https://github.com/dpolac/twig-const
Ele define o novo operador Twig,
#
que permite acessar a constante da classe através de qualquer objeto dessa classe.Use-o assim:
{% if entity.type == entity#TYPE_PERSON %}
fonte
User#TYPE_PERSON
, aNodeExpression
classe pode ser alterado para algo como isso, que trabalhou para mim:->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Obviamente, isso limita suas classes aoApp\Entity
namespace, mas acho que isso abrange o caso de uso mais comum.