Comment puis-je obtenir Response getBody () dans un événement Observer?


8

Dans Magento 1, je peux faire ce qui suit:

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

$html = $response->getBody(); 

Comment puis-je faire de même dans Magento 2?

Réponses:


6

En supposant que votre module est sous Vendor\Module

Si vous souhaitez capturer le code HTML de la réponse, vous pouvez déclarer votre événement sous etc\<area>\events.xml(où <area>est adminhtmlou 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>

Puis sous 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();
    }
}

Oui, cela fonctionne bien, je ne peux pas vous donner +50 car il n'est pas terminé 24 heures.
Pratik
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.