无法显示选择字段类型元素。如何正确地将自定义实体表示添加到 Sulu 表单?

Selection field type elements cannot be shown. How to properly add a custom entity representation to Sulu form?

跟随 Sulu documentation,我尝试添加 selection 字段类型以在管理表单中显示集合类型资源(Room 对象)。目前,我可以 select 列表中的这些元素,

select element

selected element

但是在表单提交和重新加载后无法显示任何记录,尽管 Room 对象存在于 Event 实体中:

empty list

我做错了什么?

代码:

sulu_admin.yaml

sulu_admin:
...

# Registering Selection Field Types in this section
field_type_options:
    selection:
        room_selection:
            default_type: list_overlay
            resource_key: rooms
            types:
                list_overlay:
                    adapter: table
                    list_key: rooms
                    display_properties:
                        - name
                    icon: su-clock
                    label: 'app.rooms'
                    overlay_title: 'app.rooms'

event_details.xml

        <property name="rooms" type="room_selection">
             <meta>
                 <title>app.rooms</title>
             </meta>
        </property>

您的 api 响应应仅包含 rooms 的房间 ID 列表。假设您有一个带有 $rooms 属性 的 Event 实体,将 public function getRoomIds() {} 添加到您的 Event 实体并向该方法添加 @VirtualProperty("rooms") 注释.可能您必须将 @Exclude 注释添加到 public function getRooms() {}

编辑:

我刚刚试过了,如果你有像下面这样的实体,它会按预期工作。如果仍然无法正常工作,则可能是您的 jms 序列化程序配置有问题。

/**
 * @Serializer\ExclusionPolicy("all")
 */
class Event
{
    /**
     * @Serializer\Expose()
     */
    private $otherProperty;

    /**
     * @var Collection<int, Room>
     */
    private $rooms;

    public function getRooms(): Collection
    {
        return $this->rooms;
    }

    /**
     * @Serializer\VirtualProperty()
     * @Serializer\SerializedName("rooms")
     */
    public function getRoomIds(): array
    {
        return $this->rooms->map(function (Room $room) {
            return $room->getId();
        });
    }
}