Как я могу получить Response getBody () в событии Observer?

8

В Magento 1 я могу сделать следующее:

$response = $observer->getEvent()->getControllerAction()->getResponse();
if(!$response) {
   return $this;
 }

$html = $response->getBody(); 

Как я могу сделать то же самое в Magento 2?

Pratik
источник

Ответы:

6

Предполагая, что ваш модуль находится под Vendor\Module

Если вы хотите , чтобы захваты в HTML от ответа, вы можете объявить событие под etc\<area>\events.xml(где <area>находятся adminhtmlили frontend):

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_front_send_response_before">
        <observer name="vendor_module" instance="Vendor\Module\Model\Observer" shared="false" />
    </event>
</config>

Тогда под Model\Observer.php:

<?php

namespace Vendor\Module\Model;

use Magento\Framework\Event\ObserverInterface;

class Observer implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer) 
    {
        $response = $observer->getEvent()->getData('response');
        if (!$response) return;
        $body = $response->getBody();
    }
}
Рафаэль в цифровом пианизме
источник
Да, это работает отлично, сейчас я не могу дать вам +50, потому что это не завершено 24 часа.
Pratik