# PageLoadedEvent funktioniert nicht

**URL:** <https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484>\
**Category:** Programmierung\
**Created:** [13. März 2020 um 09:34 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484 "2020-03-13T09:34:12Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [13. März 2020 um 09:34 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/1 "2020-03-13T09:34:12Z")

</div>

Hallo,

ich möchte mich auf das PageLoadedEvent subscriben. Also der für alle pageloads.

```
  public static function getSubscribedEvents(): array
  {
      return [
        PageLoadedEvent::class => 'onPageLoaded'
      ];
  }

  public function onPageLoaded($event){
    die('foo');
  }

```

Leider passiert hier gar nichts. Andere, z.B. ProductPageLoadedEvent funktionieren.

Was mache ich falsch?

---

<div class="post-metadata">

**Author:** ![CallMeAlex](https://avatars.discourse-cdn.com/v4/letter/c/e9a140/32.png) [@CallMeAlex](https://forum.shopware.com/u/CallMeAlex)\
**Post date:** [13. März 2020 um 10:40 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/2 "2020-03-13T10:40:24Z")

</div>

Sowas hatte ich auch mal, habe dann in meiner **services.xml** &nbsp;noch ein tag hinzugefügt.

Danach das Plugin deaktiviert und aktiviert. Bis lang kann ich jetzt auf jedes Event oder Eventclassen reagieren.

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [13. März 2020 um 11:19 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/3 "2020-03-13T11:19:05Z")

</div>

Hch habe den shopware.event\_subscriber tag mal hinzugefügt. Das Event wird trozdem nicht getriggert.

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [13. März 2020 um 11:38 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/4 "2020-03-13T11:38:15Z")

</div>

das ist gut möglich.

und wie subscribe ich dann alle pageloads?

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [13. März 2020 um 13:02 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/5 "2020-03-13T13:02:48Z")

</div>

habs jetzt über `FooterPageletLoadedEvent::class` gemacht.

---

<div class="post-metadata">

**Author:** ![ipman](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/ipman/32/10218_2.png) [@ipman](https://forum.shopware.com/u/ipman)\
**Post date:** [10. März 2021 um 09:14 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/6 "2021-03-10T09:14:28Z")

</div>

Die Frage Ist zwar schon etwas länger her aber mit dem `GenericPageLoadedEvent` deckt ihr soweit ich das gesehen habe alle PageLoadedEvents ab.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [2. Februar 2022 um 14:26 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/7 "2022-02-02T14:26:51Z")

</div>

Ich möchte hier noch mal auf das Thema zurück kommen. Meine Versuche haben bisher keine Resultat gebracht:

```auto
use Shopware\Storefront\Page\PageLoadedEvent;

class MySubscriber implements EventSubscriberInterface
{

  public static function getSubscribedEvents(): array
  {
  return [
    GenericPageLoadedEvent::class => 'onPageLoaded'
    ];
  }

  public function onPageLoaded(PageLoadedEvent $event): void
  {
    echo "onPageLoaded";
  }

}

```

Tests mit ProductEvents funktionieren, aber GenericPageLoadedEvent reagiert gar nicht. Da kommt auch keine Fehlermeldung. Bin etwas ratlos.

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [2. Februar 2022 um 14:41 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/8 "2022-02-02T14:41:24Z")

</div>

`use Shopware\Storefront\Page\GenericPageLoadedEvent;`

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [2. Februar 2022 um 14:47 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/9 "2022-02-02T14:47:20Z")

</div>

Oha, da kommt nicht mal eine Fehlermeldung. Danke!

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [16. März 2023 um 18:17 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/10 "2023-03-16T18:17:19Z")

</div>

ich habe ein ähnliches Problem,  
ich möchte gern 404 Fehler in 200 umwandeln.  
Leider greift folgender Code nicht, hat jemand eine Idee?

```auto
<?php

namespace MyVendor\Rvdw404to200;

use Shopware\Core\Framework\Plugin;
use Shopware\Core\Framework\Event\PageErrorEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;

class Rvdw404to200 extends Plugin implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            PageErrorEvent::class => 'onPageError'
        ];
    }

    public function onPageError(PageErrorEvent $event): void
    {
        $response = $event->getResponse();
        if ($response->getStatusCode() === 404) {
            $response->setStatusCode(Response::HTTP_OK);
        }
    }
}

```

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [17. März 2023 um 06:43 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/11 "2023-03-17T06:43:29Z")

</div>

Warum sollte man das tun? Die Statusmeldung ist doch sinnvoll. Woher soll sonst ein Cawler z.B. wissen, dass es eine Seite oder Artikel nicht (mehr) gibt?

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [17. März 2023 um 06:48 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/12 "2023-03-17T06:48:20Z")

</div>

Ich habe eine Single Page Application und die Inhalte werden mit Ajax geladen. Hinter der URL gibt es jedoch keine „echte“ URL. Also spuckt mir Shopware ein 404 aus, ich will dem Crawler und dem Besucher jedoch signalisieren, dass es ein 200er ist.

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [17. März 2023 um 07:28 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/13 "2023-03-17T07:28:15Z")

</div>

Dann scheint irgendwas im Ansatz falsch zu sein. Ich mache auch ein Single-Page Theme und habe da kein Problem.

Woher hast du denn das `PageErrorEvent`? [Ich finde das nicht](https://github.com/shopware/platform/search?q=PageErrorEvent).

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [17. März 2023 um 08:07 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/14 "2023-03-17T08:07:24Z")

</div>

Das hat mir ChatGPT-4 geschrieben.

EDIT: Danke für den Hinweis. ChatGPT hat sich entschuldigt und mir einen neuen Code vorgeschlagen, ich werde den heute abend mal prüfen.

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [17. März 2023 um 18:57 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/15 "2023-03-17T18:57:07Z")

</div>

Leider kann mir ChatGPT-4 hier nicht weiter helfen. Hat jemand eine Idee wie ich 404 in 200 umwandeln kann?  
Danke und Gruss

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [17. März 2023 um 19:50 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/16 "2023-03-17T19:50:41Z")

</div>

KernelEvents::RESPONSE subscriben

```auto
if ($response->getStatusCode() === 404) {
    $response->setStatusCode(200)
}

```

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [20. März 2023 um 09:38 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/17 "2023-03-20T09:38:16Z")

</div>

@Moorleiche vielen Dank, hast du das getestet? chatgpt hatte das gleiche vorgeschlagen, aber es funktioniert nicht.

```auto
<?php

namespace MyVendor\No404Plugin;

use Shopware\Core\Framework\Plugin;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class No404Plugin extends Plugin implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::RESPONSE => 'onKernelResponse',
        ];
    }

    public function onKernelResponse(ResponseEvent $event): void
    {
        $response = $event->getResponse();
        if ($response->getStatusCode() === Response::HTTP_NOT_FOUND) {
            $response->setStatusCode(Response::HTTP_OK);
        }
    }
}

```

es gab auch verschieden Ansätze mit der Ladereihenfolge:

```auto
KernelEvents::RESPONSE => ['onKernelResponse', -200],

```

ebenfalls verschiedene Ansätze mit Controller und Subscriber.

muss man vielleicht irgendeinen cache löschen damit so ein Plugin greift oder reicht einfach install?

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [27. März 2023 um 11:45 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/18 "2023-03-27T11:45:09Z")

</div>

Hat jemand vll eine Idee wie man das mit htaccess lösen kann?

Danke und Gruss

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [28. März 2023 um 09:36 UTC](https://forum.shopware.com/t/pageloadedevent-funktioniert-nicht/65484/19 "2023-03-28T09:36:51Z")

</div>

1. Geht das nicht über .htaccess
2. Klar funktioniert der Code nicht, da die Response ja gesetzt wird nachdem der Controller gefunden wurde. Da aber kein Crontroller gefunden wird, wirft der Kernel vorher einen Error. Hier kannst du z.B. auf `ExceptionEvent::class` subscriben und deinen eigene Exception mit 200 Status werfen (lol).
3. Ist die ganze Logik dahinter schon sehr fragwürdig. Wenn du den Status Code manipulieren musst, damit deine Anwendung funktioniert, kann eigentlich etwas nicht stimmen. Ich würde nach einer Lösung suchen, in der du die Status-Codes erst gar nicht manipulieren musst.
