2013-02-22 86 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