Php 用于sonata管理编辑表单而不是实体的ValueObject

Php 用于sonata管理编辑表单而不是实体的ValueObject,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,目前,对于编辑实体,我们将纯实体类传递给Symfony表单 例如: <?php declare(strict_types=1); class Foo { // private properties public function setFoo(?string $foo): void { $this->foo = $foo; } // more setters } 我们使用自定义模型管理器,它可以与dto一起工作,您可以在这

目前,对于编辑实体,我们将纯实体类传递给Symfony表单 例如:

<?php
declare(strict_types=1);

class Foo 
{
    // private properties
    public function setFoo(?string $foo): void
    {
        $this->foo = $foo;
    }
    // more setters
}

我们使用自定义模型管理器,它可以与dto一起工作,您可以在这里找到它
不幸的是,我们在internaly项目中使用它,所以没有文档。
以下是如何使用的简短示例:

使用SymfonyBro\SonataThings\Admin\ModelManager\AbstractDtoManager;
类CatalogModelManager扩展了AbstractDtoManager
{
受保护的函数doCreate($dto)
{
$result=新目录($dto->title,$dto->parent);
$result->setDescription($dto->description);
返回$result;
}
受保护的函数getModelClassName():字符串
{
返回CatalogDto::class;
}
受保护的函数getSubjectClass():字符串
{
返回目录::类;
}
}
您应该将其定义为服务(例如
app\u inventory.sonata\u admin.catalog\u model\u manager
)并更新管理配置

    app_inventory.admin.catalog:
        class: 'App\InventoryBundle\Admin\CatalogAdmin'
        arguments: [~, 'App\InventoryBundle\Entity\Catalog', 'SonataAdminBundle:CRUD']
        calls:
            - ['setModelManager', ['@app_inventory.sonata_admin.catalog_model_manager']]
        tags:
            - { name: 'sonata.admin', manager_type: 'orm', group: 'Equipment', label: 'Equipment type' }

这是dto

classcatalogdto
{
公费$id;
公有产权;
公共说明;
公营部门:家长;;
公共物品;;
公共函数构造()
{
$this->items=[];
}
公共函数getId()
{
返回$this->id;
}
公共函数
{
返回(字符串)$this->title;
}
}