I'm developing a module with a widget. I make my own widget.xml following some differents guide in the net. But, I've configured the widget from the back-office and I can't retrieve the widget data. It always returns NULL and all the data seem to not exists. See the widget.xml: <?xml version="1.0" encoding="UTF-8"?> <widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd"> <widget id="tata_toto_widget" class="TATA\TOTO\Block\Widget\Reco" is_email_compatible="true"> <label translate="true">Tata Toto</label> <description>Tata Toto widget.</description> <parameters> <parameter name="label" xsi:type="text" required="false" visible="true"> <label translate="true">Label</label> <description translate="true"> Define the title appearing above recommendations in the template. </description> </parameter> <parameter name="zone_id" xsi:type="text" required="true" visible="true"> <label translate="true">Zone Id</label> </parameter> <parameter name="number_of_recommendation" xsi:type="text" required="true" visible="true"> <label translate="true">Number of recommendations</label> <description translate="true">Define how many items will be shown on the template.</description> <value>5</value> </parameter> <parameter name="page_type" xsi:type="select" required="true" visible="true" source_model="TATA\TOTO\Model\Config\Source\PageType"> <label translate="true">Page type</label> </parameter> <parameter name="force_product" xsi:type="select" required="true" visible="true" source_model="Magento\Config\Model\Config\Source\Yesno"> <label translate="true">Force product recommendation</label> </parameter> <parameter name="attribute_name_sort" xsi:type="text" required="false" visible="true"> <label translate="true">Attribute name to sort</label> <depends> <parameter name="page_type" value="Sort" /> </depends> </parameter> <parameter name="order" xsi:type="select" required="false" visible="true" source_model="TATA\TOTO\Model\Config\Source\SortOrder"> <label translate="true">Order to sort</label> <depends> <parameter name="page_type" value="Sort" /> </depends> </parameter> <parameter name="group_by" xsi:type="text" required="false" visible="true"> <label translate="true">Group by attribute</label> <depends> <parameter name="page_type" value="Catalog" /> </depends> </parameter> <parameter name="template" xsi:type="select" required="true" visible="true"> <label translate="true">Template</label> <description translate="true"> The template on which the reco will be done. </description> <options> <option name="horizontal" value="TOTO_TATA::widget/horizontal.phtml" selected="true"> <label translate="true">Horizontal Grid Template</label> </option> <option name="vertical" value="TOTO_TATA::widget/vertical.phtml"> <label translate="true">Vertical Grid Template</label> </option> </options> </parameter> </parameters> </widget> </widgets> So I linked the widget to the Block TATA\TOTO\Block\Widget\Reco, here the block's code: <?php namespace TATA\TOTO\Block\Widget; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory; use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection; use Magento\Framework\View\Element\Template\Context; use TATA\TOTO\Model\Api\RecoApi; use Magento\Framework\Registry; /** * Class Reco * * @package TATA\TOTO * @author Tata Developper Team <[email protected]> */ class Reco extends AbstractRecoBlock { /* @var ProductCollectionFactory */ protected $_productCollectionFactory; /* @var ProductCollection $_productCollection */ protected $_productCollection = null; /* @var array $options */ public $options = array(); /** * Reco constructor. * * @param Context $context * @param Registry $registry * @param ProductCollectionFactory $productCollectionFactory * @param array $data */ public function __construct( Context $context, Registry $registry, ProductCollectionFactory $productCollectionFactory, array $data = []) { $this->_productCollectionFactory = $productCollectionFactory; parent::__construct($context, $registry, $data); var_dump($this->_data); // Initializing options array. $this->options['productBiz'] = $this->retrieveActualProducts(); $this->options['serverUrl'] = $this->getTotoUrl(); $this->options['tenantId'] = $this->getTenant(); $this->options['zoneId'] = $this->getZoneId(); $this->options['pageType'] = $this->getPageType(); $this->options['forceProduct'] = $this->getForceProduct(); $this->options['numberOfRecommendation'] = $this->getNumberOfRecommendation(); $this->options['order'] = $this->getOrder(); $this->options['groupBy'] = $this->getGroupBy(); $this->options['attributeNameSort'] = $this->getAttributeNameSort(); var_dump($this->options); // See the output below } // ... } > array(10) { ["productBiz"]=> array(1) { [0]=> string(4) "WT09" } ["serverUrl"]=> string(33) "someUrl" ["tenantId"]=> int(157) ["zoneId"]=> NULL ["pageType"]=> NULL ["forceProduct"]=> NULL ["numberOfRecommendation"]=> NULL ["order"]=> NULL ["groupBy"]=> NULL ["attributeNameSort"]=> NULL } All the NULL values are sets in the widget back-office. And I remove all my getX() functions for the initial "magic" function. When I var_dump($this->_data); which is the array which must contains the widget data I have nothing. > array(0) { } AbstractRecoBlock (which is extended from the above given block) is now totaly empty and extends from Magento\Framework\View\Element\Template and implements Magento\Widget\Block\BlockInterface. Here one of the guide I've following from A to Z: https://gielberkers.com/creating-widgets-in-magento-2/. Do you have any leads? Thanks!