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オブジェクトの特定の値に基づいて結果を変更したいだけです。

回答:


13

あなたが入力パラメータを必要とし、また、変更出力する必要がある場合は、使用すべき周りのプラグインではなく、後にプラグイン:

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;
} 

ただのメモ:

内部の振る舞いを変更する場合は、プラグインよりもプリファレンスの方が良いオプションであることに注意してください。何をするかによります。


結果を変更したいだけです。
Codrain Technolabs Pvt Ltd 2017

私の更新された投稿を参照してください。
Phoenix128_RiccardoT 2017

はい、(AroundPlugin)は機能しますが、(AfterPlugin)を使用してこれを実現できれば素晴らしいと思います。
Codrain Technolabs Pvt Ltd 2017

「アフター」プラグインはこのように機能することを目的としていないため、「アラウンド」プラグインを使用しないと実行できません。
Phoenix128_RiccardoT 2017

早速の対応、ありがとうございました。私も "around"で元気です
Codrain Technolabs Pvt Ltd 2017

13

Magento 2.2以降では、プラグインの後に入力パラメーターを含めることができます

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.