Magento 2 Sau khi plugin với tham số


8

Tôi đang cố gắng thực hiện sau khi plugin theo phương pháp sau.

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

Xin lưu ý các $categorytham số được truyền cho phương pháp trên.

Khi giải quyết, tôi đã thực hiện dưới đây mã.

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

Bây giờ, câu hỏi của tôi là: Làm thế nào để tôi đưa $categorytham số được truyền trong phương thức cha vào plugin của mình? Tôi chỉ muốn sửa đổi kết quả dựa trên giá trị nhất định trong $categoryđối tượng.

Câu trả lời:


12

Nếu bạn cần tham số đầu vào và bạn cũng cần thay đổi đầu ra, bạn nên sử dụng plugin xung quanh , không phải plugin sau :

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

Tôi trường hợp của bạn nó có thể là một cái gì đó như thế này:

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

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

   return $originalResult;
} 

Chỉ cần một lưu ý:

Xin lưu ý rằng nếu bạn sẽ thay đổi một hành vi nội bộ, một ưu tiên có thể là một lựa chọn tốt hơn đó là một plugin . Nó phụ thuộc vào những gì bạn sẽ làm.


Tôi chỉ muốn sửa đổi kết quả.
Codrain Technolabs Pvt Ltd

Xem bài viết cập nhật của tôi.
Phoenix128_RiccardoT

Đúng vậy (SurroundPlugin) Hoạt động nhưng sẽ thật tuyệt nếu chúng ta có thể đạt được điều này bằng cách sử dụng (AfterPlugin).
Codrain Technolabs Pvt Ltd

Không có cách nào với các plugin "sau" vì nó không có ý định hoạt động theo cách này, những gì bạn cần chỉ có thể được thực hiện với các plugin "xung quanh".
Phoenix128_RiccardoT

Cảm ơn cho phản ứng nhanh chóng của bạn. tôi cũng ổn với "xung quanh"
Codrain Technolabs Pvt Ltd

12

Kể từ Magento 2.2, có thể có các tham số đầu vào sau 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.');
    }
}

Xem tài liệu Magento để biết chi tiết https://devdocs.magento.com/guides/v2.2/extension-dev-guide/plugins.html#after-methods

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.