我正在使用Sonata Admin,我有一个列表和马赛克视图。
如何默认选择马赛克视图?
我不想隐藏列表视图,只需默认选择马赛克视图。
答案 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');
}
这些是设置和获取列表模式的方法。有用于两种列表模式的按钮:list
和mosaic
。如果将鼠标指针悬停,您会看到它们指向相同的URL,但具有不同的参数:
在方法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');
}