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.