Allgemeine Fragen + Registrierung deaktivieren

Hallo liebe Community,

ich versuche mich gerade in Shopware 6 einzuarbeiten. Mein Background ist Magento 2.

Ich habe die Video-Serie von Jisse Reitsma durch und glaube bzw. hoffe, dass ich die Basics verstanden habe.

Das Prinzip von Controller, Events/Subscriber sowie Dependency Injection ist bei Magento 2 eigentlich gleich. Was ich mir jedoch etwas zusammengereimt habe sind die Service Decorator. Wenn ich es richtig verstanden habe, kann man damit jede beliebige Funktion überschreiben bzw. erweitern. In Magento 2 entspräche das dem Prinzip der „Preference“ bzw. dem „after“, „before“ und „around“ Plugin.

Falls sich jemand mit beiden Systemen auskennt: Habe ich das soweit richtig verstanden?

Zur eigentlichen Frage: Ich würde gerne ein Plugin schreiben, das die Registrierung im Frontend komplett unterbindet. Eine Möglichkeit wäre wahrscheinlich das Template ("/account/login") anzupassen. Bei Magento 2 wäre ein Plugin jedoch die sauberere Lösung, und bei Shopware wahrscheinlich auch?!

Hat jemand eine Idee für welche Funktion man ein Plugin erstellen müsste, um die Registrierung im Frontend zu unterbinden?

PS. Ich weiß, dass es bereits fertige Plugins zum Kaufen gibt, die genau das machen. Aber zum einen möchte ich gerne lernen und zweitens, so ist es zumindest bei Magento 2, ist es meistens besser, sich sein eigenes Plugin zu schreiben.

Vielen Dank bereits im Voraus.

Du kannst einen eigenen Controller erstellen, in dem du die Route /account/login überschreibst.

Wäre das denn der richtige Weg? Wäre nicht ein „richtiges“ Plugin besser?

Ja, natürlich in einem Plugin. Dort einen Controller erstellen und in dem dann die Route überschreiben. Z.B. auf die Startseite umleiten:

/**
 * @RouteScope(scopes={"storefront"})
 */
class meinNeuerController extends StorefrontController
{
    /**
    * @Route("/account/login", name="frontend.account.login.page", methods={"GET"})
    */
    public function redirectLoginToHome(): Response
    {
        return $this->forwardToRoute('frontend.home.page');
    }
}

Danke, ja, ich muss mich noch von Magento lösen. Das Plugin von Shopware entspricht dort einem Modul und ein Plugin entspricht, so glaube ich, einem Service Decorator in Shopware (siehe oben). :slight_smile:

Wie auch immer, wenn ich die Route /account/login umleite, wäre ja aber auch das Einloggen nicht mehr möglich, oder übersehe ich etwas?

Korrekt, ist ja beides auf der selben Route. Sonst nimm es einfach aus dem Template raus. Hier wird das Registrieungsformular eingebunden:
storefront/page/account/register/index.html.twig

{% block page_account_register_container %}
    <div class="col-lg-8">
        {% sw_include '@Storefront/storefront/component/account/register.html.twig' with {
            'cardTitle': "account.registerPersonalHeader"|trans|sw_sanitize
        } %}
    </div>
{% endblock %}