作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Symfony 3.0:
在我的项目中,我有许多包含超过 50 个字段的实体,因此对于显示每个实体的 Twig ,我决定通过一个简单的循环自动显示 50 个字段。
第一个问题:如何获取实体的所有字段名称,我通过创建自定义 Twig 过滤器解决了这个问题:
<?php
// src/HomeBundle/Twig/HomeExtension.php
namespace HomeBundle\Twig;
class HomeExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('object_keys', array($this, 'getObjectKeys')),
);
}
public function getObjectKeys($object)
{
//Instantiate the reflection object
$reflector = new \ReflectionClass( get_class($object) );
//Now get all the properties from class A in to $properties array
$properties = $reflector->getProperties();
$result=array();
foreach ($properties as $property)
$result[] = $property->getName();
return $result;
}
public function getName()
{
return 'app_extension';
}
}
?>
现在产生错误的第二个问题是:如何在循环中访问对象属性:
{% for property in article|object_keys%}
<tr>
<th>
{{property|capitalize}}
{# that's work clean #}
</th>
<td>
{{ attribute(article,property) }}
{# that's generate the error #}
</td>
</tr>
{% endfor %}
错误:
An exception has been thrown during the rendering of a template("Notice: Array to string conversion"). 500 Internal Server Error -Twig_Error_Runtime
最后,在过滤器的getObjectKeys
方法上修复了错误,
所以当它返回一个我手动创建的数组时它起作用了:
return array("reference","libelle");
但是,当我发送一个在循环中创建的数组时 => 错误。
我将两个数组转储到 Twig 中,它们是等价的,但第二个仍然产生错误。
最佳答案
您的属性很可能返回一个数组,而不是简单的 string
、integer
、...
。这里的解决方案可能是将值存储在变量中并检查存储的值是否为数组。根据该检查对值执行某些操作或以其他方式仅输出变量
{% for property in article|object_keys%}
<tr>
<th>
{{property|capitalize}}
</th>
<td>
{% set value = attribute(article,property) %}
{% if value is iterable %}{# test if value is an array #}
{{ value | join(', ') }}
{% else %}
{{ value }}
{% endif %}
</td>
</tr>
{% endfor%}
关于Symfony Twig : get Object property with a variable property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045297/
我是一名优秀的程序员,十分优秀!