繁体   English   中英

如何覆盖Sonata管理控制器以提供其他对象的字段

[英]How to override sonata admin controller to provide fields of another object

我对Symfony尤其是Sonata Admin非常陌生。 在我的项目中,我有一个实体项目,它与CommunicationDetails实体具有OneToMany关系。 该CommunicationDetails实体通过ManyToOne关系链接到DataSource实体。

DataSource是我必须调用的第三个应用程序,以获取有关项目的信息。 一个项目可以与许多数据源链接。 每个通信(项目数据源)都需要一个project_datasource_id,这是第三方应用程序中项目的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 admin中,还有一些其他类型,例如“ sonata_type_admin”,用于将另一个所需类型的管理员简单地嵌入到您当前的表单中。

->add('details', 'sonata_type_admin')

在这里查看其他示例和类型

https://symfony.com/doc/2.3/bundles/SonataAdminBundle/reference/form_types.html#sonata-type-admin

因此,取决于您的目的使用哪种表单类型。

这正是我所需要的,非常感谢! 由于我的关系,我必须使用CollectionType,但这确实是我所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM