Estoy tratando de hacer que el estado de una revisión sea en approved
lugar de pending
cuando el usuario la publique en la interfaz de Magento 2.
Y tomé este enfoque. Crear un plugin antes, disponible sólo en el área de interfaz, para el método setStatusId
de los Magento\Review\Model\Review
que tiene este aspecto
public function beforeSetStatusId(\Magento\Review\Model\Review $review, $status)
{
return [\Magento\Review\Model\Review::STATUS_APPROVED];
}
Me pareció una buena idea. Y debería funcionar ya que estoy devolviendo el estado aprobado. El método real debería recoger esto como un parámetro.
pero para mi sorpresa no funcionó.
Luego desenterré y descubrí que el método setStatusId
no existe en el modelo de revisión. Se llama mágicamente y en realidad se ejecuta setData('status_id', $status)
.
Eché un vistazo en el interceptor generado, y de hecho no hay ningún setStatusId
método.
¿Cómo puedo pluginizar los getters / setters mágicos en magento 2? ¿Es eso posible?
Nota: No necesito una solución para hacer que las revisiones se aprueben automáticamente. Sé que puedo tomar otros enfoques, como los save_before
eventos. Esto no es importante por ahora.
fuente
Una vez tuve un problema similar. Terminé con el
setData()
método pluginize , aunque en mi opinión eso genera un tremendo desperdicio de recursos ... :-(fuente
setData
llamadas. No es perfecto, pero es un poco mejor que usarlosetData
. Quizás también puedas cambiar tu enfoque y dormir un poco mejor por la noche. :)