CMS Sulu — Условие видимости из базового значения единственного выбора ресурса

#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;