当映射实体是抽象时使用 Sonata Admin 创建新内容 class

Create new content using Sonata Admin when mapped entity is an abstract class

我正在尝试使用 Sonata Admin 创建新内容,但是由于实体是 abstract class 我在屏幕上看到一个标题为 Select object type 的新面板,并且内容有一个蓝色框说 No object types available.

我不知道我需要 set-up 什么样的设置才能 select 并创建扩展我的 abstract class 的实体之一。

我们非常欢迎任何帮助!

AppBundle\Entity\AbstractAlert

 /**
  * @ORM\InheritanceType("SINGLE_TABLE")
  * @ORM\DiscriminatorColumn(
  *     name="dtype",
  *     type="string"
  * )
  * @ORM\DiscriminatorMap({
  *     "email" = "AppBundle\Entity\EmailAlert",
  *     "sms" = "AppBundle\Entity\SmsAlert"
  * })
  */
 abstract class AbstractAlert
 {
 }

AppBundle\Entity\EmailAlert

 class EmailAlert extends AbstractAlert
 {
 }

AppBundle\Entity\SmsAlert

 class SmsAlert extends AbstractAlert
 {
 }

SonataAdminBundle\Admin\AlertAdmin

 class MassiveAlertAdmin extends AbstractAdmin
 {
     protected function configureFormFields(FormMapper $form)
     {
         $form
             ->with('panel name')
             ->add('fieldName')
             ->end();
     }
 }

This is how it looks 我的奏鸣曲管理员 => 创建页面

如果你们中的任何人能给我一个线索,我将不胜感激。

在此先感谢您的帮助,

好的,我错了,终于找到了适合你的解决方案......你只需选择你已经获得的抽象实体并通过 DI 设置子classes,如 16.3 中所示 https://sonata-project.org/bundles/admin/2-1/doc/reference/advance.html ... 这就像一个魅力,你会在添加按钮中得到你的选择!如果没有,我可以想象,每个具体实体 class 也必须有自己的管理服务,我的 classes 已经有了。 对我来说:学习永无止境……很抱歉我在之前 post 中的错误回答……拥有这些知识现在也对我有所帮助,改进了我的代码。谢谢你。

从 11/2018 开始,我遇到了同样的问题,但我使用 yaml 来配置服务。

class'Operation'是抽象的

这是一个使用 yaml 的例子

app.admin.operation:
  class: App\Admin\OperationAdmin
  arguments: [~, App\Entity\Operation, ~]
  tags:
    - { name: sonata.admin, manager_type: orm, group: "app.admin.group.operation", label: Operation }
  calls:
    - [ setSubClasses, [{ TeamOperation: App\Entity\TeamOperation, Staff: App\Entity\StaffOperation, PlayersOperation: App\Entity\PlayersOperation} ]]

使用这种类型的配置,您可以 select 这 3 个实体之间 'Operation' 的类型。