1

我想用 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 做到这一点吗?

提前致谢。

4

2 回答 2

4

我想您最好的方法是在您的实体中制作自定义设置器和获取器。

例如,您有实体用户:

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;
        }
于 2013-04-11T15:51:26.350 回答
4

感谢你的回答。但是,我一直在寻找 Internet 上的信息,并找到了其他方法来做到这一点。您可以为您的字段呈现特定模板。在您的 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() 用于显示其长度。

于 2013-04-15T08:47:38.713 回答