【问题标题】:SonataDoctrineORM - Model extendsSonataDoctrineORM - 模型扩展
【发布时间】:2013-02-22 18:27:38
【问题描述】:

我正在使用 Sonata 与 SonataAdmin 和 SonataOrm,如几个教程中所述。

我只是想删除 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);
  }

}
?>

并告诉 Sonata DoctrineOrm 默认使用它。

但我不知道该怎么做。

我至少在正确的轨道上吗?

【问题讨论】:

标签: symfony doctrine-orm symfony-sonata sonata-admin doctrine-odm


【解决方案1】:

您仍然需要告诉 adminbundle 使用您的自定义 ModelManager。为此,您必须在定义管理服务时应用 setModelManager 方法。 服务.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

【讨论】:

  • 为管理类覆盖/创建一个单独的模型管理器是一种常见的做法吗?批量操作?
  • 对于批处理操作,通常您只需覆盖您的 CRUDController,除非您需要执行一些尚未在基础模型管理器类中编写的“模型管理”。
  • 感谢@Geert Wille。实际上,我想将一些批处理操作移至自定义模型管理器,以将业务逻辑保留在我的“服务”类中并保持 CRUD 精简。我很快就会尝试这个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 2020-11-29
  • 2010-09-27
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多