2017-09-29 12 views
0

グリッド内のいくつかのレコードを選択して削除しようとしても例外があります。MassDeleteアクション中のMagento2の例外

1例外(S):例外#0(InvalidArgumentException):ここではその例外である Amiddio \ニュース\モデル\ニュース\ Magentoの\ Frameworkの\のDataObjectを拡張しない

は は

Magentoのバージョンがある

2.1.8

アプリ\コード\ Amiddio \ニュース\ビュー\ adminhtml \ ui_component \ news_grid_listing.xml

<argument name="data" xsi:type="array"> 
     <item name="config" xsi:type="array"> 
      <item name="sticky" xsi:type="boolean">true</item> 
     </item> 
    </argument> 
    <massaction name="listing_massaction"> 
     <action name="delete"> 
      <argument name="data" xsi:type="array"> 
       <item name="config" xsi:type="array"> 
        <item name="type" xsi:type="string">delete</item> 
        <item name="label" xsi:type="string" translate="true">Delete</item> 
        <item name="url" xsi:type="url" path="news/actions/massDelete"/> 
        <item name="confirm" xsi:type="array"> 
         <item name="title" xsi:type="string" translate="true">Delete items</item> 
         <item name="message" xsi:type="string" translate="true">Are you sure you want to delete selected items?</item> 
        </item> 
       </item> 
      </argument> 
     </action> 
    </massaction> 

アプリは\ code \ Amiddio \ニュース\ ETC \ di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> 
    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory"> 
     <arguments> 
      <argument name="collections" xsi:type="array"> 
       <item name="news_grid_listing_data_source" xsi:type="string">Amiddio\News\Model\ResourceModel\News\Grid\Collection</item> 
      </argument> 
     </arguments> 
    </type> 
</config> 

アプリは\ code \ Amiddio \ニュース\モデル\ News.php

namespace Amiddio\News\Model; 

use Magento\Framework\Model\AbstractModel; 

class News extends AbstractModel 
{ 

    protected function _construct() 
    { 
     $this->_init('Amiddio\News\Model\ResourceModel\News'); 
    } 

} 

アプリは\ code \ Amiddio \ニュース\モデル\ ResourceModel \ News.php

namespace Amiddio\News\Model\ResourceModel; 

use Magento\Framework\Model\ResourceModel\Db\AbstractDb; 

class News extends AbstractDb 
{ 
    protected function _construct() 
    { 
     $this->_init('amiddio_news', 'news_id'); 
    } 
} 

アプリは\ code \ Amiddio \ニュース\モデル\ ResourceModel \ニュース\ Collection.php

namespace Amiddio\News\Model\ResourceModel\News; 

class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection 
{ 

    protected function _construct() 
    { 
     $this->_init(' Amiddio\News\Model\News', 'Amiddio\News\Model\ResourceModel\News'); 
    } 

} 

アプリは\ code \ Amiddio \ニュース\モデル\ ResourceModel \ニュース\グリッド\ Collection.php

namespace Amiddio\News\Controller\Adminhtml\Actions; 

use Magento\Framework\Controller\ResultFactory; 
use Magento\Backend\App\Action\Context; 
use Magento\Ui\Component\MassAction\Filter; 
use Amiddio\News\Model\ResourceModel\News\CollectionFactory; 

/** 
* Class MassDelete 
*/ 
class MassDelete extends \Magento\Backend\App\Action 
{ 
    /** 
    * @var Filter 
    */ 
    protected $filter; 

    /** 
    * @var CollectionFactory 
    */ 
    protected $collectionFactory; 

    /** 
    * @param Context $context 
    * @param Filter $filter 
    * @param CollectionFactory $collectionFactory 
    */ 
    public function __construct(Context $context, Filter $filter, CollectionFactory $collectionFactory) 
    { 
     $this->filter = $filter; 
     $this->collectionFactory = $collectionFactory; 

     parent::__construct($context); 
    } 

    /** 
    * Execute action 
    * 
    * @return \Magento\Backend\Model\View\Result\Redirect 
    * @throws \Magento\Framework\Exception\LocalizedException|\Exception 
    */ 
    public function execute() 
    { 
     $collection = $this->filter->getCollection($this->collectionFactory->create()); 
     $collectionSize = $collection->getSize(); 

     foreach ($collection as $page) { 
      $page->delete(); 
     } 

     $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collectionSize)); 

     /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ 
     $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); 
     return $resultRedirect->setPath('news/index/'); 
    } 
} 
MassDelete.php \
namespace Amiddio\News\Model\ResourceModel\News\Grid; 

use Amiddio\News\Model\ResourceModel\News\Collection as GridCollection; 
use Magento\Framework\Search\AggregationInterface; 
use Magento\Framework\Api\Search\SearchResultInterface; 
use Magento\Framework\View\Element\UiComponent\DataProvider\Document; 
use Amiddio\News\Model\ResourceModel\News; 
use Magento\Framework\Api\SearchCriteriaInterface; 

class Collection extends GridCollection implements SearchResultInterface 
{ 
    protected $aggregations; 

    protected function _construct() 
    { 
     $this->_init(Document::class, News::class); 
    } 

    public function getAggregations() 
    { 
     return $this->aggregations; 
    } 

    public function setAggregations($aggregations) 
    { 
     $this->aggregations = $aggregations; 
    } 

    public function getAllIds($limit = null, $offset = null) 
    { 
     return $this->getConnection()->fetchCol($this->_getAllIdsSelect($limit, $offset), $this->_bindParams); 
    } 

    public function getSearchCriteria() 
    { 
     return null; 
    } 

    public function setSearchCriteria(SearchCriteriaInterface $searchCriteria = null) 
    { 
     return $this; 
    } 

    public function getTotalCount() 
    { 
     return $this->getSize(); 
    } 

    public function setTotalCount($totalCount) 
    { 
     return $this; 
    } 

    public function setItems(array $items = null) 
    { 
     return $this; 
    } 
} 

アプリは\ code \ Amiddio \ニュース\コントローラ\ Adminhtml \アクション

私はMagento 2で初心者ですが、私はこの問題を数日前に解決しようとしています。多分誰かがその問題を抱えていて、彼/彼女は解決策を知っていたでしょうか?

ありがとうございました!

答えて

0

あなたのニュースモデル(app \ code \ Amiddio \ News \ Model \ News.php)では、クラスがIdentityInterfaceを実装する必要があります。

変更:

ニュースAbstractDbを{拡張するクラス...

へ:

使用Magentoの\ Frameworkの\のDataObject \ IdentityInterface。

クラスのニュースはAbstractDb私はバグは私のコードをイム見つけIdentityInterface {....

+0

残念ながら、それは役に立たなかった。私はまだその例外を見る。 – PHPer

0

を実装して拡張します。 ファイル '... ResourceModel \ News \ Collection.php'には、 'Amiddio \ News \ Model \ News'の前にスペースがあります。

問題が解決しました。