无法显示选择字段类型元素。如何正确地将自定义实体表示添加到 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();
});
}
}
跟随 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();
});
}
}