我想用SonataAdmin显示一个对象的某些字段。其中一个字段是数据库中的整数(状态),但我不想显示整数,否则根据此字段的值显示特定字符串。
public function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('name')
->add('notice')
->add('start')
->add('end')
->add('status')
;
}
有可能吗?
还有第二个问题: 在同一个例子中,我想添加一个未映射到数据库(人员)中的字段,因为这是使用与其他对象相关的数据计算的。
public function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('name')
->add('notice')
->add('start')
->add('end')
->add('status')
->add('people')
;
}
我可以使用Sonata Admin进行此操作吗?
提前致谢。
答案 0 :(得分:4)
我想你最好的方法就是在你的实体中制作自定义的setter和getter。
例如,您拥有实体用户:
private $customState; // NOTE -> NO ORM MAPPING because you don't want an actual column
public function setCustomState() {
if($this->state){
$this->customState = 'yup!';
return $this;
}
$this->customState = 'nope!';
return $this;
}
public function getCustomState() {
return $this->customState;
}
答案 1 :(得分:4)
感谢您的回答。但是,我一直在寻找互联网上的信息,我找到了其他方法来做到这一点。您可以为您的字段呈现特定模板。在Admin类中,您可以在configureListFields函数中执行此操作:
public function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('name')
->add('notice')
->add('start')
->add('end')
->add('status', 'string', array('template' => 'YourBundle:YourController:status_field.html.twig'))
->add('Resources', 'string', array('template' => 'YourBundle:YourController:resources_field.html.twig'))
}
对于“状态”字段,status_field.html.twig模板将呈现如下:
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
<div>
{% if object.status == 0 %}
<strong>Inactivo</strong>
{% elseif object.status == 1 %}
<strong>Activo</strong>
{% endif %}
</div>
{% endblock %}
对于我的第二个问题,同样的解决方案是有效的。为“资源”字段呈现的模板如下所示:
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
<div>
<strong>{{ object.getResources|length }}</strong>
</div>
{% endblock %}
通过这种方式,对象将传递给模板,您可以使用其方法获取所需的信息。在这种情况下,方法getResources()用于显示其长度。