Add custom UI Component (button) to product listing with POST request
-
15-04-2021 - |
문제
how can I add button that make POST request to controller next to "Add Product" button in product listing? So far I do it like this, but it isn't send POST:
Vendor/Module/view/adminhtml/ui_component/product_listing.xml
<?xml version="1.0"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<settings>
<buttons>
<button name="synchronize" class="Vendor\Module\Block\Adminhtml\Product\Edit\Button\CustomButton">
</button>
</buttons>
</settings>
</listing>
Vendor/Module/Block/Adminhtml/Product/Edit/Button/CustomButton
<?php
namespace Vendor\Module\Block\Adminhtml\Product\Edit\Button;
use Magento\Backend\Model\UrlInterface;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
class CustomButton implements ButtonProviderInterface
{
private $urlBuilder;
public function __construct(UrlInterface $urlBuilder)
{
$this->urlBuilder = $urlBuilder;
}
public function getButtonData()
{
return [
'label'=>__('Custom label'),
'class' => 'action-secondary',
'on_click'=> "setLocation('" .
$this->urlBuilder->getUrl("path/to/controller", ['key'=>$this->urlBuilder->getSecretKey('front', 'controller', 'action')])
. "')",
'sort_order'=>100,
];
}
}
해결책
Within a post request, you need a request body (data to send along with the POST) and the UI doesn't provide body property, so it's understandable that you cannot send POST within the current implementation.
제휴하지 않습니다 magento.stackexchange