如何使用Sonata列表制作一个弹出窗口来选择项目

3

我最近开始使用Symfony进行项目开发,在其中,有一个基于Sonata模块的后台管理。我很喜欢Sonata展示的那种列表,可以搜索/筛选等等。所以,问题来了:

我能否将这个列表作为弹出窗口,例如选择我的数据库中的用户时使用?

举个例子:

  • 我在我的数据库中有一张用户表。
  • 我有一个表单,其中有一个输入框可以选择用户,但是数据库中有10,000个用户,所以不能使用下拉菜单。
  • 我希望使用我的Sonata项目中的用户列表作为弹出窗口,并且当客户端点击列表中的用户时,将其放入基础表单中。

这是可能的吗?有没有方法可以实现?

2个回答

1

是的,您可以使用sonata_type_model_list作为字段类型来实现此操作。

您可以在这里看到一些示例。

请注意,对于大型数据集,如果不添加一些过滤器,它将会变得相当无用,否则它只是一个巨大的分页列表。


我的意思是在 Sonata 之外通过 URL 调用它,但还是谢谢你的尝试,你的答案帮助了我解决其他问题 ;) - Santi Iglesias

0

最终我成功了,创建了具有以下字段的新管理员:

protected $baseRouteName = 'admin_product_clean_list';
protected $baseRoutePattern = 'product-clean';

我还重写了getTemplate方法,以使用我的干净自定义布局,如下所示:

public function getTemplate($name)
{
    switch ($name) {
        case 'layout':
            return 'DemoBundle:admin:onlytable_layout.html.twig';
            break;
        default:
            return parent::getTemplate($name);
            break;
    }
}

然后就可以像这样使用它与URL:

"{{ app.request.getBaseURL() }}/admin/product-clean/list"

不确定这是否是最好的方法,但它非常有效。我可以使用我的自定义布局,复制自Sonata项目(vendor/sonata-project/admin-bundle/Resources/views/standard_layout.html.twig),并删除或添加任何我想要的内容。您也可以使用Sonata的空白或Ajax布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接