Hikmadh Commerce| Ecommerce Development Consulting | Magento Development and Consulting Service

Create a custom GraphQL urlResolver service

The Magento\UrlRewrite module converts URL rewrite requests to canonical URLs. As a result, your custom urlResolver module does not require its own class for performing these actions, but it must be able to save and delete entries in the url_rewritetable.

Create observers

You can use the Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserverclass as the basis for saving URL rewrites. For deleting entries, create a ProcessUrlRewriteDeleteObserver class similar to the following:

				
					* Generate urls for UrlRewrite and save it in storage
 *
 * @param \Magento\Framework\Event\Observer $observer
 * @return void
 */
public function execute(EventObserver $observer)
{
    /** @var \Magento\MyModule\Model\Page $myEntityPage  */
    $page = $observer->getEvent()->getObject();

    if ($page->isDeleted()) {
        $this->urlPersist->deleteByData(
            [
                UrlRewrite::ENTITY_ID => $page->getId(),
                UrlRewrite::ENTITY_TYPE => MyEntityPageUrlRewriteGenerator::ENTITY_TYPE,
            ]
        );
    }
}
				
			

Configure the custom module

Update the graphql.xml and events.xml file in your module’s etc directory to configure your custom GraphQL urlResolver service:

 

Add lines similar to the following in your module’s graphql.xml file to define the enumeration. The UrlRewriteGraphQl module defines UrlRewriteEntityTypeEnum.

				
					pre id="query">
  <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_GraphQl:etc/graphql.xsd">
    <type xsi:type="Enum" name="UrlRewriteEntityTypeEnum">
      <item name="my_entity">MY_ENTITY</item>
    </type>
  </config>
				
			

Define two events similar to the following in your module’s events.xml file.

				
					 <event name="mymodule_page_save_after">
    <observer name="process_url_rewrite_saving" instance="Magento\MyModuleRewrite\Observer\ProcessUrlRewriteSavingObserver" />
  </event>
 <event name="mymodule_page_delete_after">
    <observer name="process_url_rewrite_delete" instance="Magento\MyModuleRewrite\Observer\ProcessUrlRewriteDeleteObserver" />
  </event>