I’m trying to view a grid in database but I’m stuck on this error:
Es100ProductNotifierModelResourceModelSubscriptionGridSubscriptionModel does not extend MagentoFrameworkDataObject
Collection.php
<?php
namespace Es100ProductNotifierModelResourceModelSubscriptionGrid;
use MagentoFrameworkViewElementUiComponentDataProviderSearchResult;
class Collection extends SearchResult
{
protected $_idFieldName = 'subscription_id';
/**
* Collection constructor.
*
* @param MagentoFrameworkDataCollectionEntityFactoryInterface $entityFactory
* @param PsrLogLoggerInterface $logger
* @param MagentoFrameworkDataCollectionDbFetchStrategyInterface $fetchStrategy
* @param MagentoFrameworkEventManagerInterface $eventManager
*/
public function __construct(
MagentoFrameworkDataCollectionEntityFactoryInterface $entityFactory,
PsrLogLoggerInterface $logger,
MagentoFrameworkDataCollectionDbFetchStrategyInterface $fetchStrategy,
MagentoFrameworkEventManagerInterface $eventManager,
$connection = null,
$resource = null
) {
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
}
protected function _construct()
{
$this->_init(SubscriptionModel::class, SubscriptionResource::class);
}
}
ModelResourceModelSubscription.php
<?php
namespace Es100ProductNotifierModelResourceModel;
use MagentoFrameworkModelResourceModelDbAbstractDb;
class Subscription extends AbstractDb
{
protected function _construct()
{
$this->_init('es100_productnotifier_subscription', 'subscription_id');
}
}
ModelSubscription.php
<?php
namespace Es100ProductNotifierModel;
use MagentoFrameworkModelAbstractModel;
use MagentoFrameworkDataObjectIdentityInterface;
class Subscription extends AbstractModel implements IdentityInterface
{
const CACHE_TAG = 'es100_productnotifier_subscription';
protected $_cacheTag = self::CACHE_TAG;
protected $_eventPrefix = 'es100_productnotifier_subscription';
protected function _construct()
{
$this->_init(Es100ProductNotifierModelResourceModelSubscription::class);
}
public function getIdentities()
{
return [self::CACHE_TAG . '_' . $this->getId()];
}
}
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- Configurazione della CollectionFactory per la UI Component Grid -->
<type name="MagentoFrameworkViewElementUiComponentDataProviderCollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="es100_productnotifier_subscription_listing_data_source" xsi:type="string">Es100ProductNotifierModelResourceModelSubscriptionGridCollection</item>
</argument>
</arguments>
</type>
<!-- Definizione VirtualType per la Collection -->
<virtualType name="Es100ProductNotifierModelResourceModelSubscriptionGridCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">es100_productnotifier_subscription</argument>
<argument name="resourceModel" xsi:type="string">Es100ProductNotifierModelResourceModelSubscription</argument>
</arguments>
</virtualType>
</config>
subscription_listing
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="provider" xsi:type="string">es100_productnotifier_subscription_listing.es100_productnotifier_subscription_listing_data_source</item>
<item name="deps" xsi:type="string">es100_productnotifier_subscription_listing.es100_productnotifier_subscription_listing_data_source</item>
</item>
<item name="spinner" xsi:type="string">subscription_columns</item>
</argument>
<dataSource name="es100_productnotifier_subscription_listing_data_source">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">MagentoFrameworkViewElementUiComponentDataProviderDataProvider</argument>
<argument name="name" xsi:type="string">es100_productnotifier_subscription_listing_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">subscription_id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
<item name="update_url" xsi:type="url" path="mui/index/render"/>
<item name="storageConfig" xsi:type="array">
<item name="indexField" xsi:type="string">subscription_id</item>
</item>
</item>
</argument>
</argument>
</dataSource>
<listingToolbar name="listing_top">
<paging name="listing_paging"/>
</listingToolbar>
<columns name="subscription_columns">
<selectionsColumn name="ids">
<settings>
<indexField>subscription_id</indexField>
</settings>
</selectionsColumn>
<column name="subscription_id">
<settings>
<filter>textRange</filter>
<sorting>asc</sorting>
<label>ID</label>
</settings>
</column>
<column name="email">
<settings>
<filter>text</filter>
<sorting>asc</sorting>
<label>Email</label>
</settings>
</column>
<column name="product_id">
<settings>
<filter>text</filter>
<sorting>asc</sorting>
<label>Product ID</label>
</settings>
</column>
<column name="is_sent">
<settings>
<filter>select</filter>
<sorting>asc</sorting>
<label>Email Sent</label>
<options>
<option name="0" xsi:type="array">
<item name="value" xsi:type="number">0</item>
<item name="label" xsi:type="string">No</item>
</option>
<option name="1" xsi:type="array">
<item name="value" xsi:type="number">1</item>
<item name="label" xsi:type="string">Yes</item>
</option>
</options>
</settings>
</column>
<column name="created_at">
<settings>
<filter>dateRange</filter>
<sorting>desc</sorting>
<label>Created At</label>
</settings>
</column>
</columns>
</listing>
Anyone have a solution?