奏鸣曲管理员:默认选中马赛克

时间:2018-05-14 13:12:51

标签: symfony sonata-admin sonata symfony-sonata

我正在使用Sonata Admin,我有一个列表和马赛克视图。 如何默认选择马赛克视图?
我不想隐藏列表视图,只需默认选择马赛克视图。

2 个答案:

答案 0 :(得分:2)

Admin类继承自AbstractAdmin。如果我们有一个Entity类Foo,我们将创建一个扩展FooAdmin的Admin类Sonata\AdminBundle\Admin\AbstractAdmin

让我们看一下源代码:

public function setListMode($mode)
{
    if (!$this->hasRequest()) {
        throw new \RuntimeException(sprintf('No request attached to the current admin: %s', $this->getCode()));
    }

    $this->getRequest()->getSession()->set(sprintf('%s.list_mode', $this->getCode()), $mode);
}

public function getListMode()
{
    if (!$this->hasRequest()) {
        return 'list';
    }

    return $this->getRequest()->getSession()->get(sprintf('%s.list_mode', $this->getCode()), 'list');
}

这些是设置和获取列表模式的方法。有用于两种列表模式的按钮:listmosaic。如果将鼠标指针悬停,您会看到它们指向相同的URL,但具有不同的参数:

  • / list?_list_mode = list
  • / list?_list_mode = mosaic

在方法getListMode中,我们看到list模式是默认调用的。

我发现将mosaic设置为默认值的方法是在Admin类中调用方法setListMode

protected function configureListFields(ListMapper $listMapper)
{
    if ($mode = $this->request->query->get('_list_mode')) {
        $this->setListMode($mode);
    } else {
        $this->setListMode('mosaic');
    }

    $listMapper
        ->addIdentifier('fooId')
        ->add('fooBar')
    ;
}

我希望它可以帮助某人。我一直在寻找更优雅的方式,例如在admin服务中进行设置,但找不到更好的解决方案。如果有人有其他建议,我很乐意学习新知识。

答案 1 :(得分:0)

  

在方法getListMode中,我们看到按以下方式调用列表模式   默认。

因此,我认为最简单的方法是覆盖getListMode并将'list'替换为'mosaic'。

public function getListMode()
{
    if (!$this->hasRequest()) {
        return 'mosaic';
    }

    return $this->getRequest()->getSession()->get(sprintf('%s.list_mode', $this->getCode()), 'mosaic');
}