Magento 2.3 Fatal Error: Call to Undefined Method getUrlBuilder()

adminformcustom-buttongridmagento2magento2.3

I'm new to Magento 2.3, I'm getting an error when I hit Add New Banner button, Grid is loading perfectly, error appear when i try to open form, I don't know how to resolve this, BTW I copied this module and may be the module was running on Magento 2.1.

ERROR IMAGE

enter image description here

Code for /PHPCuong/BannerSlider/Block/Adminhtml/Banner/Edit/GenericButton.php

<?php

namespace PHPCuong\BannerSlider\Block\Adminhtml\Banner\Edit;

use Magento\Framework\View\Element\UiComponent\Context;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;

/**
 * Class GenericButton
 */
class GenericButton implements ButtonProviderInterface
{
    /**
     * @var Context
     */
    protected $context;

    /**
     * @var \Magento\Framework\AuthorizationInterface
     */
    protected $_authorization;

    /**
     * @param Context $context
     * @param \Magento\Framework\AuthorizationInterface $authorization
     */
    public function __construct(
        Context $context,
        \Magento\Framework\AuthorizationInterface $authorization
    ) {
        $this->context = $context;
        $this->_authorization = $authorization;
    }

    /**
     * Return the Banner ID
     *
     * @return int
     */
    public function getBannerId()
    {
        return (int)$this->context->getRequest()->getParam('id');
    }

    /**
     * Generate url by route and parameters
     *
     * @param   string $route
     * @param   array $params
     * @return  string
     */
    public function getUrl($route = '', $params = [])
    {
        return $this->context->getUrlBuilder()->getUrl($route, $params);
    }

    /**
     * {@inheritdoc}
     */
    public function getButtonData()
    {
        return [];
    }

    /**
     * Check permission for passed action
     *
     * @param string $resourceId
     * @return bool
     */
    protected function _isAllowedAction($resourceId)
    {
        return $this->_authorization->isAllowed($resourceId);
    }
}

Best Answer

GetUrl has been rewritten slightly

https://github.com/magento/magento2/blob/2.3-develop/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php#L364

   /**
     * @inheritdoc
     */
    public function getUrl($route = '', $params = [])
    {
        return $this->urlBuilder->getUrl($route, $params);
    }

Safest option would be to match this and inject @param UrlInterface $urlBuilder

You might even be able to simply use

return $this->context->getUrl($route, $params);

Related Topic