如何动态添加/删除显示字段在索纳塔管理


How to dynamically add/remove show fields in Sonata Admin

我想删除一些只有在其他字段具有一定值时才相关的显示字段,但实体不能从管理类访问

解决方案是重写管理控制器的preShow动作:

// FooAdminController.php
/**
 * @param Request $request
 * @param Foo     $object
 *
 * @return null|'Symfony'Component'HttpFoundation'Response
 */
protected function preShow(Request $request, $object)
{
    $ret = parent::preShow($request, $object);
    /** @var FieldDescriptionCollection $show */
    $show = $this->admin->getShow();
    if ($object->isBar()) {
        $show->remove('baz');
    }
    return $ret;
}