#php #reactjs #sulu
Вопрос:
У меня есть три сущности Provision
, Gatekeeper
и Data
.
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
сущностей я хочу включить a visibleCondition
для списка данных:
lt;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"gt; lt;keygt;provision_detailslt;/keygt; lt;propertiesgt; lt;property name="gatekeeper" type="single_gatekeeper_selection" mandatory="true"gt; lt;metagt; lt;titlegt;app.gatekeeperlt;/titlegt; lt;/metagt; lt;/propertygt; lt;property name="data" type="data_selection" visibleCondition="!!gatekeeper amp;amp; gatekeeper.allowData"gt; lt;metagt; lt;titlegt;app.datalt;/titlegt; lt;/metagt; lt;/propertygt; lt;/propertiesgt; lt;/formgt;
Есть ли какая-либо возможность реализовать такое поведение? Я уже пытался добавить пользовательский ConditionDataProvider
, но главная проблема в том, что visibleCondition
он оценивается на Field
уровне, в то время как единственное место, откуда я мог бы извлечь необходимые данные,- это ResourceListStore
в SingleSelect
.
Ответ №1:
Это невозможно, у вас есть доступ только к необработанным данным формы. Для одного выбора gatekeeper
значение содержит только id
выбранный элемент. Нет никаких данных об элементе, стоящем за этим элементом.
Все данные, к которым у вас есть доступ, вы видите в запросе на сохранение (ПУБЛИКАЦИЮ/РАЗМЕЩЕНИЕ) формы.
Единственное, что возможно, — это использовать resource_store_properties_to_request
для фильтрации результата вашего выбора data_selection по идентификатору привратника, для этого требуется, чтобы ваш api данных учитывал gatekeeper
параметр для фильтрации по нему:
lt;propertiesgt; lt;property name="gatekeeper" type="single_gatekeeper_selection" mandatory="true"gt; lt;metagt; lt;titlegt;app.gatekeeperlt;/titlegt; lt;/metagt; lt;/propertygt; lt;property name="data" type="data_selection"gt; lt;metagt; lt;titlegt;app.datalt;/titlegt; lt;/metagt; lt;paramsgt; lt;param name="resource_store_properties_to_request" type="collection"gt; lt;param name="gatekeeper" value="gatekeeper"/gt; lt;/paramgt; lt;/paramsgt; lt;/propertygt; lt;/propertiesgt;