Magento 2 After plugin avec paramètre


8

J'essaye d'implémenter après plugin la méthode suivante.

public function getCategoryUrl($category)
{
    if ($category instanceof ModelCategory) {
        return $category->getUrl();
    }
    return $this->_categoryFactory->create()->setData($category->getData())->getUrl();
}

Veuillez noter le $categoryparamètre transmis à la méthode ci-dessus.

En tant que résolution, j'ai implémenté le code ci-dessous.

public function afterGetCategoryUrl(\Magento\Catalog\Helper\Category $subject, $result)
{
    return $result;
} 

Maintenant, ma question est: comment puis-je faire passer le $categoryparamètre dans la méthode parent à mon plugin? Je veux juste modifier le résultat en fonction de la certaine valeur de l' $categoryobjet.

Réponses:


13

Si vous avez besoin de paramètres d'entrée et que vous devez également modifier la sortie, vous devez utiliser un plugin around , pas un plugin after :

public function aroundGetCategoryUrl(
    \Magento\Catalog\Helper\Category $subject,
    \Closure $proceed,
    $category
) {
   ...
   // Do your stuffs here, now you have $category
   // If you need you can call the original method with:
   // $proceed($category);
   ...
   return $something;
} 

Dans votre cas, cela pourrait être quelque chose comme ceci:

public function aroundGetCategoryUrl(
    \Magento\Catalog\Helper\Category $subject,
    \Closure $proceed,
    $category
) {
   $originalResult = $proceed($category);

   if (...) {
      ...
      return $otherResult;
   }

   return $originalResult;
} 

Juste une note:

Veuillez noter que si vous allez changer un comportement interne, une préférence pourrait être une meilleure option qu'un plugin . Cela dépend de ce que vous allez faire.


Je veux juste modifier le résultat.
— Codrain Technolabs Pvt Ltd

Voir mon article mis à jour.
— Phoenix128_RiccardoT

Oui, (AroundPlugin) fonctionne, mais ce serait formidable si nous pouvions y arriver en utilisant (AfterPlugin).
— Codrain Technolabs Pvt Ltd

Il n'y a aucun moyen avec les plugins "après" car il n'est pas destiné à fonctionner de cette façon, ce dont vous avez besoin ne peut être fait qu'avec des plugins "autour".
— Phoenix128_RiccardoT

Merci pour votre réponse rapide. je suis bien avec "autour" aussi
— Codrain Technolabs Pvt Ltd

13

Depuis Magento 2.2, il est possible d'avoir des paramètres d'entrée après le plugin

namespace My\Module\Plugin;

class AuthLogger
{
    private $logger;

    public function __construct(\Psr\Log\LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    /**
     * @param \Magento\Backend\Model\Auth $authModel
     * @param null $result
     * @param string $username
     * @return void
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function afterLogin(\Magento\Backend\Model\Auth $authModel, $result, $username)
    {
        $this->logger->debug('User ' . $username . ' signed in.');
    }
}

Voir la documentation de Magento pour plus de détails https://devdocs.magento.com/guides/v2.2/extension-dev-guide/plugins.html#after-methods

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.