symfony - 如何覆盖奏鸣曲管理控制器以提供另一个对象的字段
问题描述
我对 Symfony 非常陌生,尤其是 Sonata Admin。在我的项目中,我有一个实体项目,它与 CommunicationDetails 实体具有 OneToMany 关系。此 CommunicationDetails 实体链接到具有 ManyToOne 关系的 DataSource 实体。
DataSource 是我必须调用以获取有关项目的信息的第三个应用程序。一个项目可以与许多数据源链接。每次通信(project-datasource)都需要一个project_datasource_id,即项目在3rd party app中的ID。
/**
* @ORM\Table(name="project")
* @ORM\Entity
*/
class Project {
...
/**
* @ORM\OneToMany(targetEntity="CommunicationDetails", mappedBy="project", cascade={"persist"}, indexBy="project")
*/
private $details;
}
/**
* @ORM\Table(name="communication_details")
* @ORM\Entity;
*/
class CommunicationDetails {
...
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="details")
*/
private $project;
}
/**
* @ORM\Table(name="datasource")
* @ORM\Entity
*/
class DataSource{
...
/**
* @ORM\OneToMany(targetEntity="CommunicationDetails", mappedBy="dataSource", cascade={"persist"}, indexBy="dataSource")
*/
private $details;
我可以使用 Sonata 来管理这种行为,但我想稍微改进一下创建过程。我想在创建项目时提供 CommunicatonDetails 实体的字段。事实上,我正在寻找这样的东西(即使我知道我不能这样做):
$mapper
->with('General', ['class' => 'col-md-4'])
->add('name', TextType::class)
->add('description', TextareaType::class)
// Here, I'd like to provide fields of the CommunicationDetails entity to create these objects in the same time
->add('details.project_datasource_id', TextType::class)
->add('details.basePath', TextType::class)
->end();
我阅读了很多关于 Sonata 及其 CRUDController 的文章,我认为我必须以这种方式实现它。但是,我没有找到该怎么做。我查看了基本奏鸣曲模板,我也必须重写它,但是显示的每个表单元素都与我的模型链接,所以我不知道如何添加自己的字段。如果有人提供一些链接或任何想法,我将不胜感激!
PS:我尽力了,对不起我的英语错误。
解决方案
由于“细节”是一个集合,你不能那样做,没错。但是在奏鸣曲管理员中有一些额外的类型,例如“sonata_type_admin”,它们用于将所需类型的另一个管理员简单地嵌入到您当前的表单中。
->add('details', 'sonata_type_admin')
在此处查找其他示例和类型
https://symfony.com/doc/2.3/bundles/SonataAdminBundle/reference/form_types.html#sonata-type-admin
因此,这取决于您使用哪种表单类型的目的。
推荐阅读
- c# - .Net 5 中的 ManualResetEvent
- python - IndexError:元组索引超出范围(np.shape,reshape)
- intellij-idea - 为什么在使用带有 FX 的 OpenJDK 的 Azul Zulu 构建将 JavaFX 项目升级到 JDK 17 后,IDEA 找不到 JavaFX 包?
- r - 简单但不容易的合并任务
- flutter - Flutter 三元条件为 null 而不是 bool 的子类型
- mysql - 如何从 mySQL 数据库中只获取一个对象?
- c# - 使用特定格式格式化日期
- xaml - VS2019 或 VS2022 中的 WinUI 项目没有 XAML 热重载
- python - Python Snowflake 连接器无法在 Azure VM 上连接
- spring-boot - 如何通过 Spring Boot 的 rest 调用在数据准备好时传输?