Estou tentando tornar o status de uma revisão em approved
vez de pending
quando o usuário a publica no front-end no Magento 2.
E eu adotei essa abordagem. Criar um plugin antes, disponível apenas na área de frontend, para o método setStatusId
para os Magento\Review\Model\Review
que se parece com isso
public function beforeSetStatusId(\Magento\Review\Model\Review $review, $status)
{
return [\Magento\Review\Model\Review::STATUS_APPROVED];
}
Pareceu-me uma boa ideia. E deve funcionar, pois estou retornando o status aprovado. O método real deve então pegar isso como um parâmetro.
mas, para minha surpresa, não funcionou.
Então eu descobri e descobri que o método setStatusId
não existe no modelo de revisão. É chamado magicamente e realmente é executado setData('status_id', $status)
.
Dei uma olhada no interceptador gerado e, de fato, não há setStatusId
método.
Como posso pluginizar os getters / setters mágicos no magento 2? É mesmo possível?
Nota: não preciso de uma solução para tornar as revisões aprovadas automaticamente. Eu sei que posso adotar outras abordagens, como os save_before
eventos. Isso não é importante por enquanto.
fonte
Uma vez tive um problema semelhante. Eu acabei com o pluginize
setData()
-method, embora na minha opinião isso gere um tremendo desperdício de recursos ... :-(fonte
setData
chamadas. Não é perfeito, mas é um pouco melhor do que usarsetData
. Talvez você possa mudar sua abordagem também e dormir um pouco melhor à noite. :)