クラスを完全にオーバーライドせずにこれを行う方法はわかりません。この例の場合、XMLの「data」引数に「disabled」アイテムを設定することにより、個々のコンポーネントを無効にできます。例えば:
<?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>
これにより、$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);
}