Eu criei meu próprio módulo CRUD que contém uma ação de edição em linha semelhante à das páginas do CMS.
Tudo funciona bem, mas ao executar o phpsniffer com o padrão EcgM2 , recebo este aviso:
Método LSD modelo save () detectado em loop
Como posso evitar isso?
Nota: O mesmo aviso aparece se eu "cheirar" o arquivo principal vinculado acima.
Aqui está o meu execute
método, caso alguém precise. Mas é muito parecido com o do controlador de página CMS
public function execute()
{
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
$resultJson = $this->jsonFactory->create();
$error = false;
$messages = [];
$postItems = $this->getRequest()->getParam('items', []);
if (!($this->getRequest()->getParam('isAjax') && count($postItems))) {
return $resultJson->setData([
'messages' => [__('Please correct the data sent.')],
'error' => true,
]);
}
foreach (array_keys($postItems) as $authorId) {
/** @var \Sample\News\Model\Author $author */
$author = $this->authorRepository->getById((int)$authorId);
try {
$authorData = $this->filterData($postItems[$authorId]);
$this->dataObjectHelper->populateWithArray($author, $authorData , AuthorInterface::class);
$this->authorRepository->save($author);
} catch (LocalizedException $e) {
$messages[] = $this->getErrorWithAuthorId($author, $e->getMessage());
$error = true;
} catch (\RuntimeException $e) {
$messages[] = $this->getErrorWithAuthorId($author, $e->getMessage());
$error = true;
} catch (\Exception $e) {
$messages[] = $this->getErrorWithAuthorId(
$author,
__('Something went wrong while saving the author.')
);
$error = true;
}
}
return $resultJson->setData([
'messages' => $messages,
'error' => $error
]);
}
saveAttribute
método, uma vez que aceita uma matriz de "códigos de atributos" para salvar em vez de apenas um código de atributoAbstractAttribute
como parâmetro, porque não preciso dele na minha entidade plana. Funciona sem problemas. Obrigado novamente.