. */ declare(strict_types=1); namespace App\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\WebpackEncoreBundle\Event\RenderAssetTagEvent; /** * This class fixes the wrong pathes generated by webpack using the auto publicPath mode. * Basically it replaces the wrong /auto/ part of the path with the correct /build/ in all encore entrypoints. */ class WebpackAutoPathSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ RenderAssetTagEvent::class => 'onRenderAssetTag' ]; } public function onRenderAssetTag(RenderAssetTagEvent $event): void { if ($event->isScriptTag()) { $event->setAttribute('src', $this->resolveAuto($event->getUrl())); } if ($event->isLinkTag()) { $event->setAttribute('href', $this->resolveAuto($event->getUrl())); } } private function resolveAuto(string $path): string { //Replace the first occurence of /auto/ with /build/ to get the correct path return preg_replace('/\/auto\//', '/build/', $path, 1); } }