Sonata admin:默认选择马赛克

Posted

技术标签:

【中文标题】Sonata admin:默认选择马赛克【英文标题】:Sonata admin: mosaic selected by default 【发布时间】:2018-10-24 03:57:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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');

这些是设置和获取列表模式的方法。有两种列表模式的按钮: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')
    ;

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

【讨论】:

如果没有请求(例如全局搜索的结果),此解决方案将失败。我建议简单地做: if ($this->hasRequest()) $this->setListMode('mosaic'); @devilcius 我没有想到那种极端情况。谢谢你指出。对我来说,它确实是这样工作的。我认为理想的解决方案是在管理服务中设置选项,但我不知道该怎么做。对configureListFields 方法的任何摆弄都是一种肮脏的方法。 @devilcius 您的解决方案的问题是即使用户单击列表按钮也会显示马赛克视图。那会很烦人。 if 条件应该用你的 sn-p 扩展,以捕捉你提到的边缘情况。然而,它仍然是一个快速而肮脏的解决方案,我知道这一点,但由于缺乏更深入的理解和更好的知识,我不得不暂时坚持下去。【参考方案2】:

在 getListMode 方法中,我们看到列表模式是按 默认。

所以在我看来,最简单的方法是覆盖getListMode 并将“list”替换为“mosaic”。

public function getListMode()

    if (!$this->hasRequest()) 
        return 'mosaic';
    

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

【讨论】:

以上是关于Sonata admin:默认选择马赛克的主要内容,如果未能解决你的问题,请参考以下文章

Photoshop怎么实现图片局部马赛克

python 给视频添加马赛克

使用CANVAS实现交互性圆形马赛克效果

如何从对象检测数据加载器中的马赛克增强中获取类标签?

vcd 马赛克图中的“set_varnames=...” - 如何提高标签中的数字?

打马赛克就安全了吗?GitHub开源项目收获近19700+星