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.