如何使用自定义crud控制器重用sonata Admin paginator

时间:2014-05-06 21:30:18

标签: symfony sonata-admin

我有一个自定义CRUD控制器,其中包含一个检索自定义学说结果集并将其传递给自定义模板的操作。是否可以在不重复使用标准列表模板的情况下使用Sonata Admin的分页机制?

如果是这样,分页器期望的对象格式是什么?我在documentation

中看不到任何提及

我需要填充结果的模板是base_results.html.twig:

{% block num_pages %}
    {{ admin.datagrid.pager.page }} / {{ admin.datagrid.pager.lastpage }}
     - 
{% endblock %}

{% block num_results %}
    {% transchoice admin.datagrid.pager.nbresults with {'%count%': admin.datagrid.pager.nbresults} from 'SonataAdminBundle' %}list_results_count{% endtranschoice %}
     - 
{% endblock %}
{% block max_per_page %}
    <label class="control-label" for="{{ admin.uniqid }}_per_page">{% trans from 'SonataAdminBundle' %}label_per_page{% endtrans %}</label>
    <select class="form-control per-page small" id="{{ admin.uniqid }}_per_page">
        {% for per_page in admin.getperpageoptions %}
            <option {% if per_page == admin.datagrid.pager.maxperpage %}selected="selected"{% endif %} value="{{ admin.generateUrl('list', {'filter': admin.datagrid.values | merge({'_page': 1, '_per_page': per_page})}) }}">
                {{ per_page }}
            </option>
        {% endfor %}
    </select>
{% endblock %}

如果我想在结果集上添加额外的约束,我将如何从Sonata的列表操作中调整以下代码?

if (false === $this->admin->isGranted('LIST')) {
            throw new AccessDeniedException();
        }

        $datagrid = $this->admin->getDatagrid();
        $formView = $datagrid->getForm()->createView();

        // set the theme for the current Admin Form
        $this->get('twig')->getExtension('form')->renderer->setTheme($formView, $this->admin->getFilterTheme());

        return $this->render($this->admin->getTemplate('list'), array(
            'action'     => 'list',
            'form'       => $formView,
            'datagrid'   => $datagrid,
            'csrf_token' => $this->getCsrfToken('sonata.batch'),
        ));

1 个答案:

答案 0 :(得分:0)

DatagridBundle是一项正在进行的工作,目的是将列表,分页和过滤机制与管理员分离,以便在其他地方重复使用。因此它还不稳定。我强烈建议您暂时使用AdminBundle中的分页。

关于您的主要问题,如果您希望完全了解如何使用寻呼机,建议您查看Datagrid::buildPager方法(https://github.com/sonata-project/SonataAdminBundle/blob/master/Datagrid/Datagrid.php#L90)。