Controller wird nicht geladen/Error: Make sure there is a loader supporting the "annotation" type

Hallo Leute,
versuche gerade, ein Controller Aufruf, der auf meinem lokalen Shop funktioniert live aufzurufen. Bekomme allerdings den Error:

Hier die routes.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/routing
        https://symfony.com/schema/routing/routing-1.0.xsd">
    <import resource="../../Storefront/Controller/**/*Controller.php" type="annotation" />
</routes>

und hier die services.xml:

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="B2BB2C\Storefront\Controller\SwitchingController" public="true">
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
            <call method="setTwig">
                <argument type="service" id="twig"/>
            </call>
        </service>
    </services>
</container>

Hier der Controller Code:

<?php declare(strict_types=1);

namespace B2BB2C\Storefront\Controller;

use DateInterval;
use DateTime;
use Throwable;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use B2BB2C\classes\Paths;

#[Route(defaults: ['_routeScope' => ['storefront']])]
class SwitchingController extends StorefrontController {

    /*
    public function showExample(Request $request, SalesChannelContext $context): Response {
        return $this->renderStorefront('@WtB2BB2CSwitcher/storefront/page/example.html.twig', [
            'example' => 'Hello world'
        ]);
    }
    */

    #[Route(path: '/wt/shop-switch/', name: 'wt.shop-switch', defaults: ["XmlHttpRequest" => true, "csrf_protected" => false], methods: ['GET', 'POST'])]
    public function switch(Request $request, SalesChannelContext $context): void {
        try {
            print_r("Controller aufgerufen");
            dd();
...

Wie bereits erwähnt, lokal klappt da so, aber nicht live. Was läuft da schief?
Ich benutze Shopware 6.5.X Live ist aktuellste Shopware Version am Start…
Auf einem anderen LIVE Server(dedizierter Server) klappt der Aufruf auch. Ich vermute ein Problem bei Servern, die unter einer virtualisierten Ebene laufen…

Das heißt lokal Shopware 6.5 und live Shopware 6.6?

Das funktioniert natürlich dann nicht, da es sich um ein Major-Udpate mit Breaking-Changes handelt. Unter anderem Update von Symfony 6.4 auf Symfony 7. Anbei die Upgrade Guides:-

Unter anderem muss von
use Symfony\Component\Routing\Annotation\Route;
auf
use Symfony\Component\Routing\Attribute\Route;
umgestellt werden.

In der XML entsprechend:

<import resource="../../Storefront/Controller/**/*Controller.php" type="attribute" />

Oh. Vielen Dank für diesen Typ. Ich kann zwar erst morgen testen, ob das funktioniert, aber bereits jetzt meinem Ärger Luft machen:
Erst wurde vor Shopware 6.4.1 speziell geroutet, und jetzt angeblich schon wieder. Dass von Shopware5 zu Shopware6 der Code umgekrempelt wurde mag noch angehen, aber von 6.4 auf 6.6 gleich zweimal derart wichtige Komponenten umzuändern, nervt gewaltig…

Das funktioniert auch nicht. Die Route wird nicht gefunden:

So sieht meine routes.xml jetzt aus:

<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/routing
        https://symfony.com/schema/routing/routing-1.0.xsd">
    <import resource="../../Storefront/Controller/**/*Controller.php" type="attribute" />
</routes>

Die services.xml hat sich nicht verändert. So sieht der Controller jetzt aus:

<?php declare(strict_types=1);

namespace B2BB2C\Storefront\Controller;

use DateInterval;
use DateTime;
use Throwable;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Symfony\Component\HttpFoundation\Request;
/* This class is outdated up to Shopware 6.6. Use Symfony\Component\Routing\Attribute\Route; instead
    use Symfony\Component\Routing\Annotation\Route;
*/
use Symfony\Component\Routing\Attribute\Route;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use B2BB2C\classes\Paths;

#[Route(defaults: ['_routeScope' => ['storefront']])]
class SwitchingController extends StorefrontController {


    #[Route(path: '/wt/shop-switch/', name: 'wt.shop-switch', defaults: ["XmlHttpRequest" => true, "csrf_protected" => false], methods: ['GET', 'POST'])]
    public function switch(Request $request, SalesChannelContext $context): void {
        try {
            print_r("Controller aufgerufen");
            dd();

Shopware bringt jedes Jahr eine Major-Version heraus. In dieser werden - sinnvollerweise - auch eingesetzte Frameworks/Bibliotheken auf den neuesten Stand gebracht. Das heißt, du musst den jährlichen Aufwand einkalkulieren müssen, diese Änderungen a) zu analysieren und b) deine Programmierung entsprechend anzupassen. Das kann dann je nach Umfang der Individualisierung zwischen ein paar Stunden und ein paar Tagen/Wochen Aufwand bedeuten.

Einen Shop online zu stellen und zwei Jahre ohne Updates vor sich hindümpeln zu lassen, funktioniert heute nicht mehr. Und wenn ein Shopsystem wie Shopware sinnvollerweise de faco Standards wie Symfony oder Vue.js verwendet, müssen diese halt auch kontinuierlich nachgezogen werden.

So hart es klingt und ist: Hier macht Shopware alles richtig. Du musst also nicht genervt auf Shopware sein, sondern auf die einfach extrem schnelllebige IT-Umgebung. Bin ich auch manchmal und sehne hin und wieder einen „ehrlichen“ Holz-Handwerksberuf herbei. Bringt aber alles nichts.

Als Shopware-Entwickler - bzw. allgemein einem Entwickler in einem einigermaßen komplexem Webumfeld - musst du dich dieser Thematik einfach stellen. Das heißt um das Wissen über Symfony, Vue.js und Co. (inklusive Versionsverlauf und Upgrades) wirst du nicht herumkommen.

1 „Gefällt mir“

Hi, are-net-gmbh,

prinzipiell stimme ich Dir zu. Allerdings könnte man das ja auch in der Doku vermerken. Da ist aber nur die Routing Änderung bzgl. Shopware6.4 auf Shopware6.5 vermerkt. Und warum diese Route hier nicht funktioniert, weiß ich zwar mittlerweile, aber dokumentiert ist das auch nirgends. Zumindest finde ich es nicht.
So funktioniert das Routing jedenfalls nicht(hat es aber noch vor Shopware6.6)

 #[Route(path: '/wt/shop-switch/', name: 'wt.shop-switch', defaults: ["XmlHttpRequest" => true, "csrf_protected" => false], methods: ['GET', 'POST'])]

So funktioniert das Routing:

    #[Route(
        path: '/wt/shop-switch',
        name: 'wt.shop-switch',
        methods: ['GET', 'POST']
    )]
1 „Gefällt mir“

Wurde in 6.6 geändert: Deprecate the storefront CSRF implementation | Shopware Documentation

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.