1

いくつかのチュートリアルで説明されているように、SonataAdminとSonataOrmでSonataを使用しています。

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

}
?>

そして、SonataDoctrineOrmにデフォルトで使用するように指示します。

しかし、私はそれを行う方法がわかりません。

私は少なくとも正しい方向に進んでいますか?

4

1 に答える 1

3

それでも、カスタムModelManagerを使用するようにadminbundleに指示する必要があります。これを行うには、管理サービスを定義するときに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

于 2013-03-26T15:28:00.937 に答える