6

I've built an admin grid following a few tutorials and hit this error:

Warning: Invalid argument supplied for foreach() in /home/sadmin/mage/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider.php on line 253

I went to the file and saw this function:

protected function searchResultToOutput(SearchResultInterface $searchResult)
{
    $arrItems = [];

    $arrItems['items'] = [];
    foreach ($searchResult->getItems() as $item) {
        $itemData = [];
        foreach ($item->getCustomAttributes() as $attribute) {
            $itemData[$attribute->getAttributeCode()] = $attribute->getValue();
        }
        $arrItems['items'][] = $itemData;
    }

    $arrItems['totalRecords'] = $searchResult->getTotalCount();

    return $arrItems;
}

for my data, there are no custom attributes, so how do I bypass this part of the function for my grid to load? Var_dumping my $searchResult->getItems() shows my table data so I'm not sure why this is needed, any help or explanations are much appreciated :)

Thanks!

  • 1
    I got the same issue in one of my custom modules and found out that my [Vendor]\[Module]\Model\ResourceModel\[Module]\Grid\Collection::__constructor had called its' parent below this line $this->_init($model, $resourceModel); Then I moved the parent::__constructor to the top and issue got fixed. public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Store\Model\Store – rukrlf Oct 31 '18 at 12:40
  • Did you find an answer? – Daniel Sep 17 '19 at 11:46
  • @Daniel unfortunately not from what I remember, think I went for a completely different approach entirely - though unfortunately, that project was closed so the code is not there :/ if someone has it on their machines I might be able to get the answer out and post, but that's a big if I'm afraid :/ – treyBake Sep 17 '19 at 11:54
  • For me it was an issue with the declaration of the <virtualType> in di.xml. So I guess when a wrong dataProvider is passed to the UiComponent it leads to this error. $searchResult->getItems() the items where actual model instances instead of DataProvider/Model instances. I don't think that's enough for an answer but I hope this comment helps. – Daniel Sep 17 '19 at 13:16
  • 1
    @Daniel oo add it as answer if it's a good one^ might help some future visitor :) – treyBake Sep 17 '19 at 13:17
1

In my case the error occurred due to an wrong declaration of the <virtualType> in the di.xml.

The <virtualType> for the dataProvider can be declared the following:

<virtualType name="[Vendor]\[Module]\Model\ResourceModel\[Model]\Grid\Collection"
             type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
    <arguments>
        <argument name="mainTable" xsi:type="string">main_table</argument>
        <argument name="resourceModel" xsi:type="string">[Vendor]\[Module]\Model\ResourceModel\[Model]</argument>
    </arguments>
</virtualType>

On the name attribute of the <virtualType> I provided the wrong path to the Collection. Fixing the path did solve the problem with the error and the grid is displayed.

Due to the wrong declaration, the $searchResult->getItems() returned an array of [Vendor]/[Module]/Model/[Model] instead of an array containing Magento\Framework\View\Element\UiComponent\DataProvider\[Model] instances.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.