First of all, we need to define the action node in your ui xml.
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
......
<columns name="rent_columns">
......
<actionsColumn name="actions" class="Vendor\Module\Ui\Component\Listing\Column\Actions">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="indexField" xsi:type="string">entity_id</item>
</item>
</argument>
</actionsColumn>
</columns>
</listing>
Build the action class:
app/code/Vendor/Module/Ui/Component/Listing/Column/Actions.php
<?php
namespace Vendor\Module\Ui\Component\Listing\Column;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;
use Vendor\Module\Block\Adminhtml\Module\Grid\Renderer\Action\UrlBuilder;
use Magento\Framework\UrlInterface;
class Actions extends Column
{
/** Url path */
const URL_PATH_EDIT = 'your/url/edit';
const URL_PATH_DELETE = 'your/url/delete';
/** @var UrlBuilder */
protected $actionUrlBuilder;
/** @var UrlInterface */
protected $urlBuilder;
/**
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param UrlBuilder $actionUrlBuilder
* @param UrlInterface $urlBuilder
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
UrlBuilder $actionUrlBuilder,
UrlInterface $urlBuilder,
array $components = [],
array $data = []
) {
$this->urlBuilder = $urlBuilder;
$this->actionUrlBuilder = $actionUrlBuilder;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Prepare Data Source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
foreach ($dataSource['data']['items'] as & $item) {
$name = $this->getData('name');
if (isset($item['entity_id'])) {
$item[$name]['edit'] = [
'href' => $this->urlBuilder->getUrl(self::URL_PATH_EDIT, ['entity_id' => $item['entity_id']]),
'label' => __('Edit')
];
$item[$name]['delete'] = [
'href' => $this->urlBuilder->getUrl(self::URL_PATH_DELETE, ['entity_id' => $item['entity_id']]),
'label' => __('Delete'),
'confirm' => [
'title' => __('Delete ${ $.$data.title }'),
'message' => __('Are you sure you wan\'t to delete a ${ $.$data.title } record?')
]
];
}
}
}
return $dataSource;
}
}
Url builder class:
app/code/Vendor/Module/Block/Adminhtml/Module/Grid/Renderer/Action/UrlBuilder.php
<?php
namespace Vendor\Module\Block\Adminhtml\Module\Grid\Renderer\Action;
class UrlBuilder
{
/**
* @var \Magento\Framework\UrlInterface
*/
protected $frontendUrlBuilder;
/**
* @param \Magento\Framework\UrlInterface $frontendUrlBuilder
*/
public function __construct(\Magento\Framework\UrlInterface $frontendUrlBuilder)
{
$this->frontendUrlBuilder = $frontendUrlBuilder;
}
/**
* Get action url
*
* @param string $routePath
* @param string $scope
* @param string $store
* @return string
*/
public function getUrl($routePath, $scope, $store)
{
$this->frontendUrlBuilder->setScope($scope);
$href = $this->frontendUrlBuilder->getUrl(
$routePath,
['_current' => false, '_query' => '___store=' . $store]
);
return $href;
}
}