Create a Custom GraphQL urlResolver Service in Magento 2

The Magento_UrlRewrite module is responsible for converting URL rewrite requests into canonical URLs. Because Magento already provides a native URL resolution mechanism, a custom GraphQL urlResolver service does not require its own resolver logic.

Instead, the custom module only needs to properly create, update, and delete entries in the url_rewrite table and expose the entity type to GraphQL. Magento’s default urlResolver query will automatically handle resolution.

Create Observers for URL Rewrite Handling

Magento provides Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver as a reference implementation. You can reuse the same approach for your Hikmadh_Event custom entity.

For deleting URL rewrites, create a custom observer that removes URL rewrite records when the entity is deleted.


/**
 * Generate URLs for UrlRewrite and remove them from storage
 *
 * @param \Magento\Framework\Event\Observer $observer
 * @return void
 */
public function execute(\Magento\Framework\Event\Observer $observer)
{
    /** @var \Hikmadh\Event\Model\Event $event */
    $event = $observer->getEvent()->getObject();

    if ($event->isDeleted()) {
        $this->urlPersist->deleteByData([
            \Magento\UrlRewrite\Service\V1\Data\UrlRewrite::ENTITY_ID   => $event->getId(),
            \Magento\UrlRewrite\Service\V1\Data\UrlRewrite::ENTITY_TYPE =>
                \Hikmadh\Event\Model\UrlRewrite\EventUrlRewriteGenerator::ENTITY_TYPE,
        ]);
    }
}

  

This observer ensures that URL rewrite entries remain synchronized with the lifecycle of the Event entity.

Configure the Hikmadh_Event Module for GraphQL

To make the Event entity resolvable via Magento GraphQL, you must configure graphql.xml and events.xml inside the module’s etc directory.

Define Entity Type in graphql.xml

Magento’s UrlRewriteGraphQl module defines UrlRewriteEntityTypeEnum. Extend it with your custom event entity type.


<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="EVENT" value="event" />
    </type>

</config>

  

The enum value must exactly match the ENTITY_TYPE stored in the url_rewrite table.

Register Events in events.xml

Observers must listen to save and delete events of the Hikmadh_Event entity to keep URL rewrites in sync.


<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

  <event name="hikmadh_event_save_after">
    <observer name="hikmadh_event_urlrewrite_save"
              instance="Hikmadh\Event\Observer\ProcessUrlRewriteSavingObserver" />
  </event>

  <event name="hikmadh_event_delete_after">
    <observer name="hikmadh_event_urlrewrite_delete"
              instance="Hikmadh\Event\Observer\ProcessUrlRewriteDeleteObserver" />
  </event>

</config>

  

How GraphQL urlResolver Works with Hikmadh_Event

After configuration, Magento’s native urlResolver query automatically resolves Event URLs:

  • Saving an Event creates or updates URL rewrite records
  • Deleting an Event clears associated URL rewrites
  • GraphQL queries read directly from url_rewrite
  • Resolved responses include entity type and identifier

This approach is upgrade-safe, performant, and fully aligned with Magento’s core URL management architecture.