【发布时间】:2018-10-24 03:57:47
【问题描述】:
我正在使用 Sonata Admin,我有一个列表和一个马赛克视图。
如何默认选择马赛克视图?
我不想隐藏列表视图,默认选择马赛克视图。
【问题讨论】:
标签: symfony sonata-admin sonata symfony-sonata
我正在使用 Sonata Admin,我有一个列表和一个马赛克视图。
如何默认选择马赛克视图?
我不想隐藏列表视图,默认选择马赛克视图。
【问题讨论】:
标签: symfony sonata-admin sonata symfony-sonata
Admin 类继承自 AbstractAdmin。如果我们有一个实体类Foo,我们将创建一个管理类FooAdmin 扩展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')
;
}
我希望它可以帮助某人。我一直在寻找更优雅的方式,比如在管理服务中设置,但找不到更好的解决方案。如果有人有其他建议,我很乐意学习新知识。
【讨论】:
configureListFields 方法的任何摆弄都是一种肮脏的方法。
在 getListMode 方法中,我们看到列表模式是按 默认。
所以在我看来,最简单的方法是覆盖getListMode 并将“list”替换为“mosaic”。
public function getListMode()
{
if (!$this->hasRequest()) {
return 'mosaic';
}
return $this->getRequest()->getSession()->get(sprintf('%s.list_mode', $this->getCode()), 'mosaic');
}
【讨论】: