简体   繁体   English

Sonata管理员捆绑包,如果用户未选择任何过滤器,如何不显示任何结果并且不对DB执行任何查询?

[英]Sonata admin bundle, how do not show any results and don't execute any query to DB if user don't select any filters?

I have typical sonata-admin list action with createQuery, configureFormFields, etc . 我有典型的sonata-admin列表操作,包括createQuery, configureFormFields, etc How i can render standard page but if user don't select any filters, i show him only "select any filter for getting results"? 我如何呈现标准页面,但是如果用户不选择任何过滤器,我只会向他显示“选择任何过滤器以获得结果”?

I can use hasFilters checked but query still executed. 我可以使用hasFilters检查,但查询仍然执行。

{% if  admin.hasFilters() %}
    {{ parent() }}
{% else %}

I need some just like that, but without execute any query to DB. 我需要一些类似的东西,但不对数据库执行任何查询。

// 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();
}

This is kludge but it's working. 这很麻烦,但是正在起作用。 Just add this: 只需添加:

public function createQuery($context = 'list')
{
    $query = parent::createQuery($context);

    if (!$this->hasFilters()) {
        $query->where('1 = 0');

        return $query;
    }

    // ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM