I try to understand how Drupal Core rebuild the route automatically after route created programaticaly.
here is one example that i tried: I’m installing External Entities Module. this module will allow you to create entity and generate its route automatically.
question: how is this possible? what trigger Drupal core to rebuild the route?
i did stack trace on entity form-save action as follow: (to understand what’s triggered route rebuild)
- KernelDesctructionSubscriber.php line 48 –>
public function onKernelTerminate(PostResponseEvent $event)
- ContainerAwareEventDispacther.php line 111 –>
$definition['callable']($event, $event_name, $this);
- HttpKernel.php Line 84 –>
$this->dispatcher->dispatch(KernelEvents::TERMINATE, new PostResponseEvent($this, $request, $response));
- StackedHttpKernel.Php Line 32 –>
$kernel->terminate($request, $response);
- Drupal Kernel Line 634 –>
$this->getHttpKernel()->terminate($request, $response);
- index.php Line 22 –>
$kernel->terminate($request, $response);
if you see KernelDestructionSubscriber
in specific on: onKernelTerminate
public function onKernelTerminate(PostResponseEvent $event) { foreach ($this->services as $id) { // Check if the service was initialized during this request, destruction // is not necessary if the service was not used. if ($this->container->initialized($id)) { $service = $this->container->get($id); $service->destruct(); } } }
when the ID equal to drupal.proxy_original_service.router.builder
then it goes to: container.php : initialized method below:
public function initialized($id) { if (isset($this->aliases[$id])) { $id = $this->aliases[$id]; } return isset($this->services[$id]) || array_key_exists($id, $this->services); }
it will return TRUE
because $this->services[$id]
is set
and then it will trigger: $service->destruct()
in onKernelTerminate then rebuild the route.
the question is where in the External Entities code that will make $this->services[$id]
is set then trigger rebuild route?
i’ve been spending quite sometime and still unable to crack this…
Thanks in advance for the help