Проблема массового действия пользовательской сетки отгрузки с UiComponentFactory::argumentsresolver()
Я добавил пользовательское массовое действие в сетку отправлений для отправки нескольких отслеживаемых электронных писем одновременно, и часть сбора выдает ошибку, потому что я, должно быть, что-то упустил.
Для справки я посмотрел на класс Magento\Cms\Controller\Adminhtml\Page\MassDisable
.
Поэтому я придумал вот что:
/app/code/PerunPro/DPD/Controller/Adminhtml/Shipment/MassSendTracking.php
<?php
namespace PerunPro\DPD\Controller\Adminhtml\Shipment;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\ResultFactory;
use Magento\Sales\Api\ShipmentManagementInterface;
use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory;
use Magento\Ui\Component\MassAction\Filter;
class MassSendTracking extends \Magento\Backend\App\Action
{
/**
* Authorization level of a basic admin session
*
* @see _isAllowed()
*/
const ADMIN_RESOURCE = 'Magento_Sales::shipment';
/**
* @var Filter
*/
protected $filter;
/**
* @var CollectionFactory
*/
protected $collectionFactory;
protected $shipmentManagement;
public function __construct(
Context $context,
Filter $filter,
CollectionFactory $collectionFactory,
ShipmentManagementInterface $shipmentManagement
) {
$this->filter = $filter;
$this->collectionFactory = $collectionFactory;
$this->shipmentManagement = $shipmentManagement;
parent::__construct($context);
}
public function execute()
{
$collection = $this->filter->getCollection($this->collectionFactory->create());
// Do stuff
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
return $resultRedirect->setPath('*/*/');
}
}
Когда я отправляю запрос, я получаю следующую ошибку:
Неустранимая ошибка: Неперехваченная ошибка типа: Аргумент 2 передан Magento\Фреймворк\Представление\Элемент\uicomponentfactory::Решатель аргументов() должен иметь тип массива, заданный null, вызываемый в /var/www/magento/v2_2/vendor/magento/framework/View/Element/UiComponentFactory.php в строке 198 и определен в /var/www/magento/v2_2/vendor/magento/framework/View/Element/UiComponentFactory.php в строке 164
Я предполагаю, что мне не хватает некоторых вещей в di.xml , потому что Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory
не существует, но также не существует и Magento\Cms\Model\ResourceModel\Page\CollectionFactory
, который находится на странице\Massdisable.
CMS-система управления di.xml есть вот что об этом:
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="cms_page_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Page\Grid\Collection</item>
<item name="cms_block_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Block\Grid\Collection</item>
</argument>
</arguments>
</type>
Поэтому я попробовал с дикой догадкой в своей собственной di.xml :
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="sales_order_shipment_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment\Grid\Collection</item>
</argument>
</arguments>
</type>
Что, конечно, не имеет никакого эффекта:) Пожалуйста, помогите.
Мой module.xml последовательность, я думал, что это будет означать, что он также загружает информацию о сетке XML, но очевидно, что это не
<sequence>
<module name="Magento_Sales"/>
<module name="Magento_Shipping"/>
</sequence>
2 answers
Я понял это... Поскольку я хотел продолжить эту работу и попытался ее отладить, я заметил, что сегодня она работает.
Пока я работал над другими вещами, я несколько раз запускал команду setup:di:compile
в командной строке. Я думаю, что это то, чего не хватало из вышеперечисленного. Кроме того, материал в di.xml не нужен.
У меня возникла эта проблема, когда я ссылался на компонент пользовательского интерфейса в папке с неправильным именем. У меня это было как view/adminhtml/uiComponent
, когда это должно быть view/adminhtml/ui_component
.