1

Я использую Sonata с SonataAdmin & SonataOrm, как сказано в нескольких уроках.SonataDoctrineORM - Model extends

Я просто хотел бы, чтобы удалить какой-либо метод по умолчанию DoctrineOrmBundle- ModelManager.php

Я попытался переопределить ModelManager, поставив

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

} 
?> 

И скажите соната DoctrineOrm использовать его по умолчанию.

Но я не знаю, как это сделать.

Я, по крайней мере, на правильном пути?

+0

Связанные с вопросом: http://stackoverflow.com/questions/14516128/how-to-extends-sonata-doctrineormadminbundle -model-modelmanager/25548206 – webDEVILopers

ответ

3

Вам все еще нужно сообщить администратору, что вы используете свой собственный 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

+0

Для пакетных действий обычно вы просто переопределяете свой CRUDController, если вам не требуется выполнить некоторое «управление моделью», которое еще не написано в базовом классе modelmanager. –

+0

Спасибо @Geert Wille. На самом деле я хотел бы переместить некоторые пакетные действия в пользовательский диспетчер модели, чтобы поддерживать бизнес-логик в моем классе «службы» и поддерживать CRUD тощий. Я попробую этот пример в ближайшее время. – webDEVILopers

 Смежные вопросы

  • Нет связанных вопросов^_^