2013-02-22 125 views
1

我在SonataAdmin中使用Sonata & SonataOrm在几篇教程中讲过。SonataDoctrineORM - 模型延伸

我只是想通过把

<?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); 
    } 

} 
?> 

删除DoctrineOrmBundle- ModelManager.php

的一些默认的方法

我试图重写的ModelManager并告诉索纳塔DoctrineOrm默认使用它。

但我不知道该怎么做。

我至少在正确的轨道上?

+0

相关的问题:http://stackoverflow.com/questions/14516128/how-to-extends-sonata-doctrineormadminbundle -model-modelmanager/25548206 – webDEVILopers 2014-08-28 11:58:17

回答

3

您仍然需要告诉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'] ] 

详情请阅读下面的文档部分:http://sonata-project.org/bundles/admin/2-2/doc/reference/advanced.html

+0

重写/创建一个单独的管理类的模型管理器是一种常见的做法,例如批量操作? – webDEVILopers 2014-08-28 11:59:05

+0

对于批处理操作,通常只需重写您的CRUDController,除非您需要执行一些尚未写入基本模型管理器类的“模型管理”。 – 2014-08-31 23:42:57

+0

谢谢@Geert Wille。实际上,我想将一些批量操作移动到自定义模型管理器,以将业务逻辑保留在我的“服务”类中并保留CRUD瘦客户端。我会很快尝试这个例子。 – webDEVILopers 2014-09-01 06:35:10