Is it possible to retrieve dependency injected arguments in another class?
For example, we have a class Vendor\Module\Block\Autocomplete
.
// app/code/Vendor/Module/Block/Autocomplete.php
namespace Vendor\Module\Block;
class Autocomplete {
protected $_data = [];
public function __construct(array $data){
$this->_data = $data;
}
public function getRendererList(){
return $this->_data['rendererList'];
}
}
The following dependency injection happens to that class;
<!-- app/code/Vendor/Module/etc/di.xml -->
<type name="Vendor\Module\Block\Autocomplete">
<arguments>
<argument name="rendererList" xsi:type="array">
<item name="renderer_x" xsi:type="array">
<item name="title" xsi:type="string">News</item>
<item name="template" xsi:type="string">Vendor_Module/autocomplete/renderer_x</item>
</item>
</argument>
</arguments>
</type>
Now I want to reuse the rendererList
in another class (for example Vendor\Module\Block\Widget\Autocomplete
) but the class can't extend from Vendor\Module\Block\Autocomplete
since it is already extending from another class.
// app/code/Vendor/Module/Block/Widget/Autocomplete.php
namespace Vendor\Module\Block\Widget;
class Autocomplete extends AbstractWidget {
protected $_data = [];
public function __construct(array $data){
$this->_data = $data;
}
public function getRendererList(){
return $this->_data['rendererList'];
}
}
The following is not working, because the data argument doesn't get populated
// app/code/Vendor/Module/Block/Widget/Autocomplete.php
namespace Vendor\Module\Block\Widget;
class Autocomplete extends AbstractWidget {
protected $_autocomplete;
public function __construct(Vendor\Module\Block\Autocomplete $autocomplete){
$this->_autocomplete = $autocomplete;
}
public function getRendererList(){
return $this->_autocomplete->getRendererList();
}
}