I get QA review as below:
example/module-mymodule/UiC/DataProvider.php
is too similar to the Magento 2 file
magento/module-cms/magento-module-cms-103.0.0-beta32/Ui/Component/DataProvider.php
Since this file edits public function, you can avoid duplicating code using Magento 2's plugin structure: https://devdocs.magento.com/guides/v2.3/extension-dev-guide/plugins.html or use class preferences.
Can anyone explain, what it try to say? The file which they refer is below
<?php
namespace Example\MyModule\Ui\Component;
use Magento\Framework\Api\Filter;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\AuthorizationInterface;
use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
/**
* Component DataProvider
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
class DataProvider extends \Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
{
/**
* @var AuthorizationInterface
*/
private $authorization;
/**
* @var AddFilterInterface[]
*/
private $additionalFilterPool;
/**
* @param string $name
* @param string $primaryFieldName
* @param string $requestFieldName
* @param Reporting $reporting
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param RequestInterface $request
* @param FilterBuilder $filterBuilder
* @param array $meta
* @param array $data
* @param array $additionalFilterPool
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
$name,
$primaryFieldName,
$requestFieldName,
Reporting $reporting,
SearchCriteriaBuilder $searchCriteriaBuilder,
RequestInterface $request,
FilterBuilder $filterBuilder,
array $meta = [],
array $data = [],
array $additionalFilterPool = []
) {
parent::__construct(
$name,
$primaryFieldName,
$requestFieldName,
$reporting,
$searchCriteriaBuilder,
$request,
$filterBuilder,
$meta,
$data
);
$this->meta = array_replace_recursive($meta, $this->prepareMetadata());
$this->additionalFilterPool = $additionalFilterPool;
}
/**
* @deprecated 101.0.7
* @return AuthorizationInterface|mixed
*/
private function getAuthorizationInstance()
{
if ($this->authorization === null) {
$this->authorization = ObjectManager::getInstance()->get(AuthorizationInterface::class);
}
return $this->authorization;
}
/**
* Prepares Meta
*
* @return array
*/
public function prepareMetadata()
{
$metadata = [];
/**
* Instead of Creating Seperate ACl access, CMS authorization is used 'Magento_Cms::save'
*/
if (!$this->getAuthorizationInstance()->isAllowed('Magento_Cms::save')) {
$metadata = [
'mymodule_post_columns' => [
'arguments' => [
'data' => [
'config' => [
'editorConfig' => [
'enabled' => false
]
]
]
]
]
];
}
return $metadata;
}
/**
* @inheritdoc
*/
public function addFilter(Filter $filter)
{
if (!empty($this->additionalFilterPool[$filter->getField()])) {
$this->additionalFilterPool[$filter->getField()]->addFilter($this->searchCriteriaBuilder, $filter);
} else {
parent::addFilter($filter);
}
}
}
1 Answer 1
Generally, it means you don't need to add duplicate code in your module to meet up the customisation. The customisation can be done with the Magento 2 interceptor which known as Plugin. You can apply plugin concept to all the public methods of class in Magento 2. Hope this will help.
Explore related questions
See similar questions with these tags.