Magento 2 Setelah plugin dengan parameter


8

Saya mencoba menerapkan plugin setelah ke metode berikut.

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

Harap perhatikan $categoryparameter yang diteruskan ke metode di atas.

Sebagai resolusi, saya telah menerapkan kode di bawah ini.

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

Sekarang, pertanyaan saya adalah: Bagaimana cara mendapatkan $categoryparameter yang dikirimkan dalam metode induk ke plugin saya? Saya hanya ingin memodifikasi hasil berdasarkan nilai tertentu dalam $categoryobjek.

Jawaban:


13

Jika Anda membutuhkan parameter input dan Anda juga perlu mengubah output, Anda harus menggunakan plugin sekitar , bukan plugin setelah :

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

Saya kira Anda bisa jadi seperti ini:

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

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

   return $originalResult;
} 

Hanya sebuah catatan:

Harap perhatikan bahwa jika Anda akan mengubah perilaku internal, preferensi bisa menjadi opsi yang lebih baik daripada plugin . Itu tergantung pada apa yang akan Anda lakukan.


Saya hanya ingin mengubah hasilnya.
Codrain Technolabs Pvt Ltd

Lihat posting saya yang diperbarui.
Phoenix128_RiccardoT

Ya itu (AroundPlugin) Bekerja tetapi akan lebih bagus jika kita dapat mencapai ini menggunakan (AfterPlugin).
Codrain Technolabs Pvt Ltd

Tidak ada cara dengan plugin "setelah" karena tidak dimaksudkan untuk bekerja dengan cara ini, apa yang Anda butuhkan hanya dapat dilakukan dengan plugin "sekitar".
Phoenix128_RiccardoT

Terima kasih atas tanggapan cepat Anda. saya baik-baik saja dengan "sekitar" juga
Codrain Technolabs Pvt Ltd

13

Karena Magento 2.2 dimungkinkan untuk memiliki parameter input setelah 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.');
    }
}

Lihat dokumentasi Magento untuk detail https://devdocs.magento.com/guides/v2.2/extension-dev-guide/plugins.html#after-methods

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.