Magento 2 After参数插件


8

我正在尝试将插件插入以下方法。

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

请注意$category传递给上述方法的参数。

作为解决方案,我实现了以下代码。

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

现在,我的问题是:如何获取$category通过父方法传递给插件的参数?我只想根据$category对象中的特定值修改结果。

Answers:


13

如果需要输入参数,并且还需要更改输出,则应使用around插件,而不是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;
} 

我的情况可能是这样的:

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

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

   return $originalResult;
} 

请注意:

请注意,如果您要更改内部行为,则首选项可能是plugin更好的选择。这取决于您要做什么。


我只想修改结果。
Codrain Technolabs Pvt Ltd

看到我更新的帖子。
Phoenix128_RiccardoT

是的,(AroundPlugin)可以工作,但是如果我们可以使用(AfterPlugin)做到这一点,那就太好了。
Codrain Technolabs Pvt Ltd

“ after”插件是不可能的,因为它不打算以这种方式工作,所以您只能使用“ around”插件来完成您需要的工作。
Phoenix128_RiccardoT

谢谢你快速的回复。我也可以在“周围”
Codrain Technolabs Pvt Ltd

13

从Magento 2.2开始,可以在after插件中输入参数

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.');
    }
}

有关详细信息,请参见Magento文档 。https://devdocs.magento.com/guides/v2.2/extension-dev-guide/plugins.html#after-methods

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.