Sonata Admin - Mediabundle 中的默认排序

问题描述 投票:0回答:3

当我使用 Sonata Mediabundle 时,上传的最新图像出现在第 80 个页面上,因此我认为创建一个新的扩展包会更容易,它使用更新时间更改排序顺序:

<?php

namespace Application\Sonata\AdminBundle\Admin;

use Sonata\AdminBundle\Admin\Admin as SonataAdmin;

/**
 * Class ClientAdmin
 *
 * @package AppBundle\Admin
 */
class ClientAdmin extends SonataAdmin
{

    /**
     * @param string $code
     * @param string $class
     * @param string $baseControllerName
     */
    public function __construct($code, $class, $baseControllerName)
    {
        parent::__construct($code, $class, $baseControllerName);
        $this->datagridValues = array(
            '_page' => 1,
            '_sort_order' => 'DESC',
            '_sort_by' => 'updatedAt',
        );
    }
}

服务是这样的:

services:
  application_sonata_admin.admin.client_admin:
      class: Application\Sonata\AdminBundle\Admin\ClientAdmin
      tags:
          - { name: sonata.admin, manager_type: orm, label: "Clients"}
      arguments:
          - ~
          - '%sonata.classification.admin.collection.entity%'
          - '%sonata.classification.admin.collection.controller%'

当我直接修改管理包中的 datagridvalues 时,排序效果很好(DESC by UpdatedAt),我在扩展方面做错了什么? 我遵循了此说明

更新:作为下面有用的评论,我删除了主管理的扩展,并尝试扩展 BaseMedia,但顺序仍然错误。

<?php

namespace Application\Sonata\MediaBundle\Admin;

use Sonata\MediaBundle\Admin\BaseMediaAdmin;

/**
 * Class MediaAdmin
 *
 * @package AppBundle\Admin
 */
class MediaAdmin extends BaseMediaAdmin
{
    /**
     * @param string $code
     * @param string $class
     * @param string $baseControllerName
     */
    public function __construct($code, $class, $baseControllerName, $pool)
    {
        parent::__construct($code, $class, $baseControllerName, $pool);

        $this->datagridValues = array(
            '_page' => 1,
            '_sort_order' => 'DESC',
            '_sort_by' => 'createdAt',
        );
    }
}
sonata-admin sonata sonata-media-bundle
3个回答
2
投票

在 services.yml 中,我需要添加以下行:

 parameters:
    sonata.media.admin.media.class: Application\Sonata\MediaBundle\Admin\MediaAdmin

我还扩展了错误的类,我需要扩展的是 Sonata\MediaBundle\Admin\PHPCR\MediaAdmin 类,而不是 Sonata\MediaBundle\Admin\BaseMediaAdmin 类。

<?php

namespace Application\Sonata\MediaBundle\Admin;

use Sonata\MediaBundle\Admin\PHPCR\MediaAdmin as BaseMediaAdmin;

/**
 * Class MediaAdmin
 *
 * @package Application\Sonata\MediaBundle\Admin
 */
class MediaAdmin extends BaseMediaAdmin
{
    protected $datagridValues = array(
        '_page' => 1,
        '_per_page' => 25,
        '_sort_order' => 'DESC',
        '_sort_by' => 'createdAt',
    );
}

1
投票

您创建了一个新的管理员,而不是覆盖现有的管理员。

确保扩展 MediaBundle(不是 AdminBundle),添加一个名为:

Application\Sonata\MediaBundle\Admin\MediaAdmin
的新类并使用您已经编写的构造函数。

您不需要为您的用例添加任何服务声明。


0
投票

datagridValues 属性已弃用,另一种方法是 https://docs.sonata-project.org/projects/SonataAdminBundle/en/4.x/reference/action_list/#customizing-the-sort-order

protected function configureDefaultSortValues(array &$sortValues): void
{
    // display the first page (default = 1)
    $sortValues[DatagridInterface::PAGE] = 1;

    // reverse order (default = 'ASC')
    $sortValues[DatagridInterface::SORT_ORDER] = 'DESC';

    // name of the ordered field (default = the model's id field, if any)
    $sortValues[DatagridInterface::SORT_BY] = 'updatedAt';
}
© www.soinside.com 2019 - 2024. All rights reserved.