J'essaie de faire en sorte que le statut d'un examen soit approved
au lieu du pending
moment où l'utilisateur le poste dans le frontend de Magento 2.
Et j'ai adopté cette approche. Créer un plug - in avant, disponible uniquement dans la zone frontend, pour la méthode setStatusId
des Magento\Review\Model\Review
qui ressemble à ceci
public function beforeSetStatusId(\Magento\Review\Model\Review $review, $status)
{
return [\Magento\Review\Model\Review::STATUS_APPROVED];
}
Cela m'a semblé une bonne idée. Et cela devrait fonctionner puisque je retourne le statut approuvé. La méthode réelle devrait alors prendre cela en paramètre.
mais à ma grande surprise, cela n'a pas fonctionné.
Ensuite, j'ai déterré et constaté que la méthode setStatusId
n'existe pas dans le modèle d'examen. Il est appelé par magie et fonctionne en fait setData('status_id', $status)
.
J'ai alors jeté un œil dans l'intercepteur généré, et en effet il n'y a pas de setStatusId
méthode.
Comment puis-je pluginiser les getters / setters magiques dans magento 2? Est-ce que c'est possible?
Remarque: Je n'ai pas besoin d'une solution pour rendre les avis approuvés automatiquement. Je sais que je peux adopter d'autres approches, comme les save_before
événements. Ce n'est pas important pour l'instant.
la source
J'ai déjà eu un problème similaire. Je me suis retrouvé avec pluginize la
setData()
-méthode, même si à mon avis cela génère un énorme gaspillage de ressources ... :-(la source
setData
appels. Ce n'est pas parfait mais c'est un peu mieux que d'utilisersetData
. Vous pouvez peut-être aussi changer votre approche et dormir un peu mieux la nuit. :)