Shopware 6.5.1.1 redirect von Startseite zum Login

Weiß jemand, warum der Dump nur funktioniert, wenn ich das erste Mal den Shop lade?
Ich meine, wenn ich auf das Logo klicke, geht er zur Homepage zurück , ohne den Dump zu sehen (aber eigentlich sollte ich den Dump ständig sehen und eigentlich sollte ich nicht zur Startseite gelangen, solange ich nicht eingeloggt bin ) ?

Jedes Mal, wenn ich diesen Befehl mache: bin/console cache:clear && bin/console theme:compile, funktioniert es beim ersten Mal

Wäre für jede Hilfe mega dankbar !

private $urlGenerator;

    /**
     * @var RequestStack
     */
    private $requestStack;


    public function __construct(UrlGeneratorInterface $urlGenerator, RequestStack $requestStack)
    {
        $this->urlGenerator = $urlGenerator;
        $this->requestStack = $requestStack;
    }

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

    public function onPageLoaded(PageLoadedEvent $event): void
    {
        dump($event);

        $customer = $event->getSalesChannelContext()->getCustomer();

        if ($customer == null) {
            $this->redirectToLogin();
        }
    }

    private function redirectToLogin(): void
    {
        $route = $this->requestStack->getCurrentRequest()->attributes->get('_route');

        if ($route === 'frontend.home.page') {
            $url = $this->urlGenerator->generate('frontend.account.login');
            $response = new RedirectResponse($url);
            $response->send();
        }
    }

PS : bei einen 6.5.0.0 Shop und da drunter klappt das einwandfrei

Moin!

An sich jetzt erst mal schwer nachzuvollziehen. Ich kann da nur ein paar kleine Hinweise geben:

  • Hast Du eine Datei .env.local angelegt und dort die Variable APP_ENV=dev eingetragen?
  • dump() kenne ich persönlich nicht als PHP-Funktion, nur var_dump().

Wenn ich mich nicht irre, kann es sein, dass das PageLoaded-Event nicht getriggert wird, wenn ein anderer Seitentyp geladen wird. Außerdem ist es glaube ich ein relativ spätes Event, bei dem das Seiten-Template schon durch Twig gerendert wurde - danach erst die Weiterleitung zu machen ist ein wenig verschwendete Rechenleistung. Die aufgerufenen Events kann man über die Symfony Debug-Bar einsehen, wirf dort sonst mal einen Blick rein.

LG;LA

Erstmal danke für deine Antwort !

bei einen 6.5.0.0 Shop und da drunter klappt alles einwandfrei und es macht was es soll ist das komische

  • ja ist auf APP_ENV=prod
  • dump ist das selbe wie var_dump
  • welches Event würdest du mir denn ansonsten empfehlen ? @littleAmused

Ich habs lösen können danke für den Tipp :slight_smile:

Ok, das wird so in der PHP-Doku gar nicht erwähnt, deswegen bin ich darüber verwundert :sweat_smile:
https://www.php.net/manual-lookup.php?pattern=dump&lang=de
https://www.php.net/var_dump

Okay hab ein Problem , wenn ich das Plugin aktiviere ( auf der Staging) kommt ein The server returned a „500 Internal Server Error“ Fehler

Das Plugin ist in der Db aktiv und die Storefront macht was es soll, aber ich komm dann nicht mehr in die Admin rein @littleAmused .
Weiß du vlt woran das liegen könnte ?

class LoginRedirectSubscriber implements EventSubscriberInterface
{
    private $urlGenerator;


    public function __construct(UrlGeneratorInterface $urlGenerator)
    {
        $this->urlGenerator = $urlGenerator;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::RESPONSE => 'onKernelResponse'
        ];
    }

    public function onKernelResponse(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $customer = $request->attributes->get('sw-sales-channel-context')->getCustomer();

        if (!$customer && $request->attributes->get('_route') === 'frontend.home.page') {
            $url = $this->urlGenerator->generate('frontend.account.login');
            $event->setResponse(new RedirectResponse($url));
        }
    }
}

Auf die Schnelle leider nicht.

Versuch am besten, per SSH auf den Server zuzugreifen und das Plugin mittels Konsolen-Befehl wieder zu deinstallieren. Eventuell wird dir dort schon der Fehler angezeigt.

Alternativ in der Staging Umgebung mal den Dev-Mode aktivieren - ist zwar die unsichere Variante, aber für den Hotfix kommst Du da glaub ich gerade nicht drum herum. Der Dev-Mode ist wichtig, damit Symfony Dir den richtigen Fehler anzeigt.

LG;LA

Hast du vlt Discord, dann könnten wir uns vlt dort austauschen ? @littleAmused
Weil selbst wenn ich die Methode nru so defineire kommt der selbe fehler:

public function onKernelResponse(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $customer = $request->attributes->get('sw-sales-channel-context')->getCustomer();
        dump($request);
}

Ich klink mich mal mit ein, weil mich das Thema interessiert.
Am besten machst du das so wies der Kollege schon gesagt hat - hol dir darüber die „richtige“ Fehlermeldung. Dann macht auch ein Call mehr Sinn weil dir gleich gezielt geholfen werden kann.
Im Dev Modus bzw. per SSH dürftest du eine viel aussagekräftigere Fehlermeldung bekommen wie z.B. dass das Event gar nicht vorhanden ist oder oder oder :slight_smile:

Bis dahin, viel Erfolg und Grüße
Alex

In den Logs bekomme ich den Fehler:

[Tue Aug 15 13:04:45.424376 2023] [core:error] [pid 16318:tid 140362424715008] [client 95.223.106.105:23312] End of script output before headers: php8.1, referer: Shopware Administration (c) shopware AG

Sehe gerade das ich noch diese Fehler dazu bekomme, sobald ich zB auf Produkte klicken möchte ( kommt aber auch ohne mein Plugin):

Sagt mir aber nicht besonders viel… @MrAle

Normal spricht das für einen Timeout nach einem langen Query bzw. ein Query der nicht beendet werden kann. Oder auch Rechte Probleme - ist in die Richtung alles richtig konfiguriert?

Wie ist das allgemeine System aufgestellt, erfüllst du alle Bedingungen für 6.5.1.1?

Das Plugin hatte ich für einen 6.5.0.0 entwickelt dort klappt auch alles.
Nun hat uns der Kunde ne andere Staging gegeben welche aber 6.5.1.1 ist.

Vlt liegt dann dort iwo der Fehler, aber ich wüsste nicht wo konkret @MrAle

Du kannst dich ja mal melden und mir das Plugin mal zukommen lassen, dann schau ichs mir in einer Dev Umgebung an und find den Fehler für dich. Ich geh mal stark davon aus das einer der 3 Punkte oben nicht passt.

Grüße