当我使用 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',
);
}
}
在 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',
);
}
您创建了一个新的管理员,而不是覆盖现有的管理员。
确保扩展 MediaBundle(不是 AdminBundle),添加一个名为:
Application\Sonata\MediaBundle\Admin\MediaAdmin
的新类并使用您已经编写的构造函数。
您不需要为您的用例添加任何服务声明。
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';
}