ฉันไม่เห็นวิธีที่คุณสามารถทำได้โดยไม่ต้องเอาชนะชั้นเรียนอย่างสมบูรณ์ ในกรณีที่เป็นตัวอย่างของคุณคุณสามารถปิดการใช้งานแต่ละองค์ประกอบโดยการตั้งค่ารายการ "ปิดการใช้งาน" เป็นอาร์กิวเมนต์ "ข้อมูล" ใน XML ตัวอย่างเช่น
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<fieldset name="general">
<field name="title">
<argument name="data" xsi:type="array">
<item name="disabled" xsi:type="boolean">true</item>
</argument>
</field>
</fieldset>
</form>
สิ่งนี้จะลบ 'title' ออกจาก$components
อาร์เรย์อย่างมีประสิทธิภาพ
นี่เป็นเพราะcreateChildComponent
วิธีการในMagento\Framework\View\Element\UiComponentFactory
ชั้นเรียน:
protected function createChildComponent(
array $bundleComponents,
ContextInterface $renderContext,
$identifier
) {
list($className, $arguments) = $this->argumentsResolver($identifier, $bundleComponents);
if (isset($arguments['data']['disabled']) && (int)$arguments['data']['disabled']) {
return null;
}
$components = [];
foreach ($bundleComponents['children'] as $childrenIdentifier => $childrenData) {
$children = $this->createChildComponent(
$childrenData,
$renderContext,
$childrenIdentifier
);
$components[$childrenIdentifier] = $children;
}
$components = array_filter($components);
$arguments['components'] = $components;
if (!isset($arguments['context'])) {
$arguments['context'] = $renderContext;
}
return $this->objectManager->create($className, $arguments);
}