Symfony SonataOctrineorm-模型扩展
我将索纳塔与SonataAdmin和SonataOrm一起使用,正如几篇教程中所述 我只想删除doctrineorbundle-ModelManager.php的一些默认方法 我试图通过放置Symfony SonataOctrineorm-模型扩展,symfony,doctrine-orm,symfony-sonata,sonata-admin,doctrine-odm,Symfony,Doctrine Orm,Symfony Sonata,Sonata Admin,Doctrine Odm,我将索纳塔与SonataAdmin和SonataOrm一起使用,正如几篇教程中所述 我只想删除doctrineorbundle-ModelManager.php的一些默认方法 我试图通过放置 <?php namespace Project\AdminBundle\Model; use Sonata\DoctrineORMAdminBundle\Model\ModelManager as ModelManager; class ModelManager extends ModelMan
<?php
namespace Project\AdminBundle\Model;
use Sonata\DoctrineORMAdminBundle\Model\ModelManager as ModelManager;
class ModelManager extends ModelManager
{
/**
* {@inheritdoc}
*/
public function getSortParameters(FieldDescriptionInterface $fieldDescription, DatagridInterface $datagrid)
{
$values = $datagrid->getValues();
$values = $_GET['filter'];
if ($fieldDescription->getName() == $values['_sort_by']) {
//echo $fieldDescription->getName() . ' --- ' . $values['_sort_order'] . '<br />';
if ($values['_sort_order'] == 'ASC') {
$values['_sort_order'] = 'DESC';
} else {
$values['_sort_order'] = 'ASC';
}
} else {
$values['_sort_order'] = 'ASC';
$values['_sort_by'] = $fieldDescription->getName();
}
return array('filter' => $values);
}
}
?>
并告诉Sonata DoctrineOrm默认使用它
但我不知道怎么做
我至少走对了吗?您仍然需要告诉adminbundle使用您的自定义ModelManager。为此,在定义管理服务时,必须应用setModelManager方法。 Services.yml:
services:
#new model manager
myproject.model_manager:
class: Project\AdminBundle\Model\ModelManager
arguments:
- '@doctrine'
#define admin service
myproject_admin.project:
class: MyProject\MyBundle\Admin\ProjectAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: Projects, label: Projects }
arguments:
- null
- MyProject\MyBundle\Entity\Project
- SonataAdminBundle:CRUD
calls:
- [setModelManager, ['@myproject.model_manager'] ]
阅读以下文档部分的更多内容:与以下问题相关:覆盖/创建管理类的单个模型管理器(例如批处理操作)是一种常见做法吗?对于批处理操作,除非您需要执行一些“模型管理”,否则您通常只会覆盖CRUDController这还没有在基本modelmanager类中编写。谢谢@Geert Wille。实际上,我想将一些批处理操作移动到一个定制模型管理器,以使业务logik保持在我的“服务”类中,并保持CRUD的精简。我将很快尝试这个例子。