php - Sonata 管理包,如果用户不选择任何过滤器,如何不显示任何结果并且不对 DB 执行任何查询?
问题描述
我有典型的奏鸣曲管理员列表操作createQuery, configureFormFields, etc
。我如何呈现标准页面,但如果用户不选择任何过滤器,我只向他展示“选择任何过滤器以获取结果”?
我可以使用hasFilters
检查但查询仍然执行。
{% if admin.hasFilters() %}
{{ parent() }}
{% else %}
我需要一些类似的东西,但不对数据库执行任何查询。
// SomeController
public function listAction()
{
if (!$this->admin->hasFilters()) {
return $this->renderWithExtraParams($this->admin->getTemplate('list'), [
'action' => 'list',
'form' => $this->admin->getDatagrid()->getForm()->createView(),
'csrf_token' => $this->getCsrfToken('sonata.batch'),
'export_formats' => $this->has('sonata.admin.admin_exporter') ?
$this->get('sonata.admin.admin_exporter')->getAvailableFormats($this->admin) :
$this->admin->getExportFormats(),
], null);
}
return parent::listAction();
}
解决方案
这是kludge,但它正在工作。只需添加以下内容:
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
if (!$this->hasFilters()) {
$query->where('1 = 0');
return $query;
}
// ...
}
推荐阅读
- sql - 我试图在同时获得 MAX 结果的同时删除重复项。我无法删除重复项
- r - 有没有一种方法或内置的 R 函数可以对列表中重复名称的值求和?
- liquibase - 前提
不适用于架构 - amazon-web-services - EMR 自动终止集群未完成 Spark 应用程序?
- python - 如何插入到特定键中的字典值列表
- angular - 设置默认值时防止触发材料多选 - Angular 7
- java - 如何使用java编写一个以文本文件分隔的spark数据框选项卡
- javascript - 如何分离和定位 ID 变量
- sql - SQL在Dot Issue后将数据分为2
- node.js - 傀儡师不会启动