Problem nach Update auf Shopware 6.5.0.0

Hallo alle zusammen,

im großen und ganzen habe ich Shopware 6.5.0.0 ganz gut zum Laufen gebracht - zumindest habe ich noch keine größeren Fehler bemerkt.

Aber ausgerechnet bei der Aktivierung der Shopware eigenen „Store“ Erweiterung in der Version 2.0.0. schmiert mein System mit folgender Fehlermeldung ab:

{„errors“:[{„code“:„0“,„status“:„500“,„title“:„Internal Server Error“,„detail“:„[Semantical Error] The annotation „@RouteScope“ in class SwagExtensionStore\Controller\DataController was never imported. Did you maybe forget to add a „use“ statement for this annotation? in /www/htdocs/w019/meineDomain/custom/plugins/SwagExtensionStore/src/Controller/DataController.php (which is being imported from „/www/htdocs/w019/meineDomain/custom/plugins/SwagExtensionStore/src/Resources/config/routes.yaml“). Make sure there is a loader supporting the „annotation“ type.“}]}

Weder das Frontend noch das Backend ist dann zu erreichen. Ich muss die Shopware Store Erweiterung dann über die Cli deaktivieren, damit ich das System wieder zum Laufen bringe.

In einem anderen Testshop bringe ich den Shopware Store seltsamerweise problemlos zum laufen.

Hat jemand eine Idee, wie ich das Problem lösen kann?

Geh in das verzeichnis SwagExtensionStore/src/Controller/DataController.php
Ersetzt die @RouteScope annoation im plugin durch
@Route(defaults={„_routeScope“={„storefront“}})
(Das was über der class zwischen /***/ steht. )

Wohlbemerkt routescope, nicht route. Zudem musst du ggf auch alle EntityRepositoryInterfaces durch EntityRepository ersetzen.

Welche Composer Pakete verwendet denn dein Shopware 6.5?
Ich habe ein Problem mit shopware/recovery, das gibt es nur in der Version 6.4 und hängt auch von shopware core 6.4 ab.

Könntest du evtl. mal den require Teil aus deiner composer.json posten?

1 „Gefällt mir“

Habe auf stockoveflow ziemlich schräge Lösung gefunden, die funktioniert jedoch, im Vergleich zur anderen, hier vorgeschlagenen Lösung.

Man kommentiert einfach routes.yaml aus, mit # vor jeder Zeile.
Dann geht alles wieder.

(Die Datei liegt in /custom/plugins/SwagExtensionStore/src/Resources/config/ routes.yaml)

# blabla
# 	blablabla
# 	blablabla
# 	blablabla
3 „Gefällt mir“

Hallo,
vielen Dank für Ihre Eure Antworten.
@ Rakowu

Ich verstehe Deinen Tipp nicht ganz. So sieht meine DataController.php aus:

<?php declare(strict_types=1);

namespace SwagExtensionStore\Controller;

use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\Routing\Annotation\Since;
use Shopware\Core\Framework\Store\Search\ExtensionCriteria;
use SwagExtensionStore\Services\StoreDataProvider;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * @internal
 * @Route(defaults={"_routeScope"={"api"}, "_acl"={"system.plugin_maintain"}})
 */
class DataController
{
    private StoreDataProvider $dataProvider;

    public function __construct(StoreDataProvider $dataProvider)
    {
        $this->dataProvider = $dataProvider;
    }

    /**
     * @Since("6.4.0.0")
     * @Route("/api/_action/extension-store/list", name="api.extension.list", methods={"POST", "GET"})
     */
    public function getExtensionList(Request $request, Context $context): Response
    {
        if ($request->getMethod() === Request::METHOD_POST) {
            $criteria = ExtensionCriteria::fromArray($request->request->all());
        } else {
            $criteria = ExtensionCriteria::fromArray($request->query->all());
        }

        $listing = $this->dataProvider->getListing($criteria, $context);

        return new JsonResponse([
            'data' => $listing,
            'meta' => [
                'total' => $listing->getTotal(),
            ],
        ]);
    }

    /**
     * @Since("6.4.0.0")
     * @Route("/api/_action/extension-store/detail/{id}", name="api.extension.detail", methods={"GET"})
     */
    public function detail(int $id, Context $context): Response
    {
        return new JsonResponse($this->dataProvider->getExtensionDetails($id, $context));
    }

    /**
     * @Since("6.4.0.0")
     * @Route("/api/_action/extension-store/{id}/reviews", name="api.extension.reviews", methods={"GET"})
     */
    public function reviews(int $id, Request $request, Context $context): Response
    {
        $criteria = ExtensionCriteria::fromArray($request->query->all());

        return new JsonResponse($this->dataProvider->getReviews($id, $criteria, $context));
    }

    /**
     * @Since("6.4.0.0")
     * @Route("/api/_action/extension-store/store-filters", name="api.extension.store_filters", methods={"GET"})
     */
    public function listingFilters(Request $request, Context $context): JsonResponse
    {
        /** @var array<string, string> $params */
        $params = $request->query->all();

        return new JsonResponse($this->dataProvider->getListingFilters($params, $context));
    }
}

Die einzige Geschichte mit _routeScope ist doch auskommentiert? Was soll ich da genau ändern?

@ BeckerEnterprises
So sieht meine composer.json aus:

{
    "name": "shopware/production",
    "type": "project",
    "license": "MIT",
    "config": {
        "optimize-autoloader": true,
        "sort-packages": true,
        "allow-plugins": {
            "composer/package-versions-deprecated": true,
            "symfony/flex": true,
            "symfony/runtime": true
        }
    },
    "prefer-stable": true,
    "scripts": {
        "auto-scripts": {
            "assets:install": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "autoload": {
        "psr-4": {
            "Shopware\\Production\\": "src/"
        }
    },
    "repositories": [
        {
            "type": "path",
            "url": "custom/plugins/*/packages/*",
            "options": {
                "symlink": true
            }
        },
        {
            "type": "path",
            "url": "custom/static-plugins/*",
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "php": "^7.4.3 || ^8.0",
        "composer-runtime-api": "^2.0",
        "shopware/administration": "~6.5.0",
        "shopware/core": "~6.5.0",
        "shopware/elasticsearch": "~6.5.0",
        "shopware/storefront": "~6.5.0",
        "symfony/flex": "^2",
        "symfony/runtime": "^5.0|^6.0"
    },
    "require-dev": {
        "fakerphp/faker": "^1.20",
        "maltyxx/images-generator": "^1.0",
        "mbezhanov/faker-provider-collection": "^2.0",
        "symfony/stopwatch": "^5.0|^6.0",
        "symfony/web-profiler-bundle": "^5.0|^6.0"
    },
    "extra": {
        "symfony": {
            "allow-contrib": true,
            "endpoint": [
                "https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json",
                "flex://defaults"
            ]
        }
    }
}

@elvisfrontdesk
Deine „schräge Lösung“ hat bei mir leider nicht funktioniert ;-(

1 „Gefällt mir“

Ich hatte ein bisschen anderes Problem wahrscheinlich.

{"errors":[{"code":"0","status":"500","title":"Internal Server Error","detail":"

[Semantical Error] The annotation '@Shopware\\Core\\Framework\\Routing\\Annotation\\Acl' in class SwagExtensionStore\\Controller\\DataController was never imported. Did you maybe forget to add a 'use' statement for this annotation? in \/var\/www\/vhosts\/xxxxxx\/httpdocs\/custom\/plugins\/SwagExtensionStore\/src\/Controller\/DataController.php (which is being imported from '\/var\/www\/vhosts\/xxxxxx\/httpdocs\/custom\/plugins\/SwagExtensionStore\/src\/Resources\/config\/routes.yaml'). Make sure there is a loader supporting the 'annotation' type."

}]}

Mein Store-Plugin war noch 1.7. Dann habe ich dieses 500 Problem gelöst, und dann alle Plugins auf 2.0.0 usw updated. Und der Shop geht wieder.

Jetzt sieht mein Controller genauso wie bei dir aus. Davor stand da was anderes bei RouteScope:

* @RouteScope(scopes={"api"})

und die Änderung auf
* @Route(defaults={"_routeScope"={"storefront"}})
hat nichts gebracht, aber die Fehlermeldung hat sich eigentlich geändert. Also ist es nicht wirklich auskommentiert.

@RouteScope(scopes={"api"})

wird zu:

#[Route(defaults: ['_routeScope' => ['api']])]
#[Package('storefront')]
@Route(path="/bla-bla/search-by-product", name="frontend.blabla.searchbyproduct", options={"seo"="false"}, methods={"POST"}, defaults={"XmlHttpRequest"=true})

wird zu:

#[Route(path:"/bla-bla/search-by-product", name:"frontend.blablba.searchbyproduct", options:["seo"=>"false"], methods:["POST"], defaults:["XmlHttpRequest"=>true])]
1 „Gefällt mir“

Versuch mal dweseom’s schreibweise. Das ist nicht auskommentiert sondern eine Annotation schreibweise.

Danke für den Tipp funktioniert auch bei der fehlermeldung nach dem Update → [Semantical Error] The annotation „@Shopware\Core\Framework\Routing\Annotation\Acl“ in class SwagExtensionStore\Controller\DataController was never imported. Did you maybe forget to add a „use“ statement for this annotation?

1 „Gefällt mir“

Das sind zwar gute Ansätze aber immer noch keine finale detaillierte Lösung. Ich habe das gleiche Problem und konnte den Fehler leider noch nicht beheben.

Meiner Meinung nach geht es hier um einen fehlenden Eintrag für das Update einer Erweiterung in der DataController.php. Wenn es den Fehler beheben würde, hätte ich etwas auskommentiert, nur was? Wie soll eigentlich die routes.yaml aussehen, vielleicht liegt dort der Fehler? Welche composer.json wird hier angesprochen, es gibt etliche bei Shopware?

Es würde mich sehr freuen, wenn es hier jemanden gibt, der sich damit auskennt und mir bei der Fehlerbehebung helfen kann.

Hier ist meine Fehlermeldung:

{„errors“:[{„code“:„0“,„status“:„500“,„title“:„Internal Server Error“,„detail“:„[Semantical Error] The annotation \u0022@Shopware\Core\Framework\Routing\Annotation\RouteScope\u0022 in class SwagExtensionStore\Controller\DataController was never imported. Did you maybe forget to add a \u0022use\u0022 statement for this annotation? in /srv/www/shopware/https/custom/plugins/SwagExtensionStore/src/Controller/DataController.php (which is being imported from \u0022/srv/www/shopware/https/custom/plugins/SwagExtensionStore/src/Resources/config/routes.yaml\u0022). Make sure there is a loader supporting the \u0022annotation\u0022 type.“}]}

Hallo,

hat in der Zwischenzeit jemand eine Lösung dazu gefunden? Ich habe momentan das gleiche Problem mit einem anderen Plugin. Im Controller ist folgender Code:

#[Route(defaults: ['_routeScope' => ['storefront']])]
#[Package('storefront')]

Von "@RouteScope" steht dar gar nichts mehr. Eigentlich sieht alles so aus, wie es unter 6.5 sein muss. Wie, weiter oben beschrieben, funktioniert das Plugin auch in einem anderen Test-Shop problemlos. Woran kann dass liegen?

Viele Grüße, Frank

Hallo Frank,

du hast also ein ähnliches Problem wie ich mit dem Update auf 6.5, dann sprechen wir über keinen Einzelfall. Daher hoffe ich, das uns jemand aus dem Forum helfen kann?

Hallo Frank, hallo rainbow_dc,

wir haben das gleiche Problem und konnten es auch noch nicht lösen, es ist also kein Einzelfall.

Ich habe einen Issue dafür angelegt:

Hi,
bei mir trat der Fehler nach einem Update auf 6.5 auf. Nach dem Update hatte ich das Plugin für den Extension Store wieder aktiviert, es war allerdings noch auf Version 1.7, da diese Version noch nicht die nötigen Änderungen hat, funktionierte der Shop nicht mehr richtig. Die Lösung war, per shell in den Ordner zu gehen und das Plugin wieder zu deaktivieren php bin/console plugin:deactivate SwagExtensionStore. Das Backend war dann wieder zu erreichen und ich konnte das Plugin aktualisieren (jetzt Version 2.0).

1 „Gefällt mir“

@dli Das war die Lösung. Vielen Dank!

Hallo, ich habe soeben das gleiche Problem - auch in der Version 2.0.0 der Erweiterung (Shopware-Version 6.5.4.0)
Die Lösung von @elvisfrontdesk funktioniert zwar - aber haben diese Angaben in der routes.yaml nicht eine Funktion? Kann man das einfach auskommentieren?

Die Datei wird danach vom System wieder abgeändert, sie bleibt nicht auskommentiert.

Bei mir nämlich sieht sie jetzt so aus:

swag_extension_store:
    resource: ../../Controller/*Controller.php
    type: annotation

# blabla Tipp hat uns geholfen, danke!

Update auf V2.1 bringt jetzt den erneuten Fehler des Themenerstellers.
Habe das Plugin erstmal in der Datenbank deaktiviert, aber eine bessere Lösung wäre toll.
Gibt es das Plugin in der Version 2.0 zum Direktdownload für einen Downgrade?

1 „Gefällt mir“

Kann ich leider bestätigen, auch 2.1, obige Lösungen haben nicht geholfen.
Direkt nach einem Klick auf Update ist Backend und Frontend nicht mehr erreichbar, bei mir hat dann das Löschen des Plugin Ordners auf dem FTP Server mit anschließendem wieder draufkopieren geholfen. Aber der Store sollte schon irgendwie zugänglich sein…

Habe außerdem noch das Problem [Fehlerhaft konfigurierte APP_URL] - evtl. hängt das damit zusammen?