Sulu CMS - 来自资源单选底层价值的可见性条件

Sulu CMS - Visiblity condition from underlying value of resource single selection

我有三个实体 ProvisionGatekeeperData

class Provision {
    private Gatekeeper $keeper; // ManyToOne
    private Collection $points; // ManyToMany
}

class Gatekeeper {
    private int $id;
    private string $name;
    private bool $allowData;
}

class Data {
    private int $value;
}

所有实体都实现了 REST-CRUD 逻辑。为了编辑 Provision 实体,我将配置添加到 sulu_admin.yaml:

sulu_admin:
  field_type_options:
    selection:
      data_selection:
        default_type: 'list_overlay'
        resource_key: 'data'
        types:
          list_overlay:
            adapter: 'table'
            list_key: 'data'
            display_properties: ['value']
            icon: 'su-plus'
            label: 'app.data'
            overlay_title: 'app.action.select.data'
    single_selection:
      single_gatekeeper_selection:
        default_type: 'single_select'
        resource_key: 'gatekeepers'
        types:
          single_select:
            display_property: 'name'
            id_property: 'id'
            overlay_title: 'app.action.select.gatekeeper'

现在,在 Provision 实体的表单配置文件中,我想为数据列表包含一个 visibleCondition

<form xmlns="http://schemas.sulu.io/template/template"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/form-1.0.xsd">
    <key>provision_details</key>
    <properties>
        <property name="gatekeeper" type="single_gatekeeper_selection" mandatory="true">
            <meta>
                <title>app.gatekeeper</title>
            </meta>
        </property>
        <property name="data" type="data_selection" visibleCondition="!!gatekeeper && gatekeeper.allowData">
            <meta>
                <title>app.data</title>
            </meta>
        </property>
    </properties>
</form>

是否有可能实现这种行为?我已经尝试添加自定义 ConditionDataProvider,但主要问题是 visibleCondition 是在 Field 级别评估的,而我唯一可以从中提取所需数据的地方是ResourceListStoreSingleSelect.

这是不可能的,您只能访问原始表格数据。对于单个选择,gatekeeper 值仅包含所选元素的 id。没有该元素后面元素的任何数据。

您有权访问的所有数据,您会在表格的保存 (POST/PUT) 请求中看到。

唯一可能的是使用 resource_store_properties_to_request 通过网守 ID 过滤您的 data_selection 结果,这需要您的数据 api 需要保持 gatekeeper 记住要过滤的参数:

    <properties>
        <property name="gatekeeper" type="single_gatekeeper_selection" mandatory="true">
            <meta>
                <title>app.gatekeeper</title>
            </meta>
        </property>

        <property name="data" type="data_selection">
            <meta>
                <title>app.data</title>
            </meta>

            <params>
                <param name="resource_store_properties_to_request" type="collection">
                    <param name="gatekeeper" value="gatekeeper"/>
                </param>
            </params>
        </property>
    </properties>