can*_*nni 126 php templates twig
我的实体类中有一些类常量,例如:
class Entity {
const TYPE_PERSON = 0;
const TYPE_COMPANY = 1;
}
Run Code Online (Sandbox Code Playgroud)
在普通的PHP中,我经常这样做if($var == Entity::TYPE_PERSON),我想在Twig中做这种事情.可能吗?
mes*_*age 228
只是为了节省你的时间.如果需要访问命名空间下的类常量,请使用
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
Run Code Online (Sandbox Code Playgroud)
Nik*_*kiC 175
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Run Code Online (Sandbox Code Playgroud)
请参阅constant功能和constant测试的文档.
Ale*_*rov 26
从1.12.1开始,您也可以从对象实例中读取常量:
{% if var == constant('TYPE_PERSON', entity)
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nin 10
如果您使用名称空间
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Run Code Online (Sandbox Code Playgroud)
重要!使用双斜杠,而不是单斜杠
Dam*_*lac 10
编辑:我找到了更好的解决方案,请在此处阅读.
假设你上课了:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Run Code Online (Sandbox Code Playgroud)
创建并注册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
);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以在Twig中使用常量了:
{{ MyClass.MY_CONSTANT }}
Run Code Online (Sandbox Code Playgroud)
在Symfony的书籍最佳实践中,有一个部分涉及此问题:
由于constant()函数,常量可以在Twig模板中使用:
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Run Code Online (Sandbox Code Playgroud)
并在模板树枝中使用此常量:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Run Code Online (Sandbox Code Playgroud)
链接:http: //symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options