SonataDoctrineORM - 模型扩展 [英] SonataDoctrineORM - Model extends

查看:155
本文介绍了SonataDoctrineORM - 模型扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Sonata与SonataAdmin& SonataOrm在几个教程中说过。



我只想删除DoctrineOrmBundle- ModelManager.php的一些默认方法



我试图通过将

 <?php 

命名空间Project\来覆盖ModelManager AdminBundle\Model;

使用Sonata\DoctrineORMAdminBundle\Model\ModelManager作为ModelManager;

class ModelManager扩展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();
}

返回数组('filter'=> $ values);
}

}
?>

并告诉Sonata DoctrineOrm默认使用它。



但我不知道该怎么做。



我至少在正确的轨道上?

解决方案

您仍然需要告诉管理员使用您的自定义ModelManager。为此,您必须在定义管理服务时应用setModelManager方法。
Services.yml:

 服务:
#new模特经理
myproject.model_manager:
类:Project\AdminBundle\Model\ModelManager
参数:
- '@doctrine'

#define admin service
myproject_admin.project :
class:MyProject\MyBundle\Admin\ProjectAdmin
标签:
- {name:sonata.admin,manager_type:orm,group:Projects,label:Projects}
参数:
- null
- MyProject\MyBundle\Entity\Project
- SonataAdminBundle:CRUD
调用:
- [setModelManager,['@myproject .model_manager']]

阅读更多文档的以下部分: http://sonata-project.org/bundles/admin/2-2/doc/参考, nce / advanced.html


I'm using Sonata with SonataAdmin & SonataOrm as told in several tutorials.

I simply would like to remove some default method of DoctrineOrmBundle- ModelManager.php

I tried to override the ModelManager by putting

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

}
?>

And tell Sonata DoctrineOrm to use it by default.

But I don't know how to do it.

Am I at least on the right track ?

解决方案

You still need to tell the adminbundle to use your custom ModelManager. To do so you have to apply the setModelManager method when defining your admin services. 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'] ]

Read more in following section of the documentation: http://sonata-project.org/bundles/admin/2-2/doc/reference/advanced.html

这篇关于SonataDoctrineORM - 模型扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆