Du kannst dir den Router aus dem DI holen. Da assemblst du dir die URL via Array mit [‘sViewport’ => ‘detail’, ‘sArticle’ => $id];
Als zweiten Argument braucht der ein RoutingContext. Am Routing Context gibs Static Methoden zum erstellen
Du kannst dir den Router aus dem DI holen. Da assemblst du dir die URL via Array mit [‚sViewport‘ => ‚detail‘, ‚sArticle‘ => $id];
Als zweiten Argument braucht der ein RoutingContext. Am Routing Context gibs Static Methoden zum erstellen
Danke für den Hint, aber leider bin ich anscheinend zu sehr Dummy für die Antwort.
Ich versuche seit 2 Stunden mithilfe der Shopware Buchs (Kapitel 16.2.2), Google und Fulltextsuche im Shopware Sourcecode Deine Antwort zu entschlüsseln, aber schaffe es nicht.
Ich bin jetzt soweit, dass ich folgenden Code in meine Rest API Erweiterung eingebaut habe:
Prinzipiell sieht das gut aus bei dir. Ich habe statt ‘sViewport’ ‘controller’ genutzt. Aber das müsste egal sein. Ich glaube bei dir fehlt einfach nur der Shop Context. Ich habe das letztens so gemacht:
use Shopware\Components\Routing\Context;
use Shopware\Components\Routing\Router;
$shop = $this->modelManager->getRepository(\Shopware\Models\Shop\Shop::class)->getById($product['subshopID']);
// oder ein anderer Shop
// $this->modelManager->getRepository(\Shopware\Models\Shop\Shop::class)->getActiveDefault();
$shopContext = Context::createFromShop($shop, Shopware()->Container()->get('config'));
$routerParams = [
'module' => 'frontend',
'controller' => 'detail',
'sArticle' => $product['articleID']
];
// wenn es sich um eine Variante handeln solln
//$routerParams['number'] = $product['articleordernumber'];
$url = $this->router->assemble($routerParams, $shopContext);
@arnebecker: Vielen Dank, allerdings komme ich über Deinen Code nicht an den Shop Context.
Ich starte aus der Datei “engine\Shopware\Components\Api\Resource\Article.php” aus der Klasse “Article” in der Funktion “getOne”.
Da habe ich keine Ahnung, wie ich an $shop oder den Shopcontext kommen soll. Hätte nicht gedacht, dass es so wahnsinnig kompliziert ist,
aus einer API Erweiterung auf die SEO Url zu gelangen.
Wenn ich Deinen Code einsetze, erhalte ich eine Fehlermeldung:
"Fatal error: Uncaught Error: Call to a member function getRepository() on null in custom/plugins/SwagExtendArticleResource/Components/Api/Resource/Article.php on line 59"
Ich weiß, dass der Beitrag schon ziemlich alt ist. Ich habe jedoch den Code in dieser Art in einem Projekt untergebracht und es hat auch alles funktioniert. Seit dem Update auf 5.7.x generiert dies leider einen Fehler:
Error message: Method „Shopware::Router“ not found failure
Hier scheint sich etwas geändert zu haben, leider konnte ich dazu jedoch im Changelog keinerlei Information finden.
Hat vielleicht jemand eine Idee, wie ich das behoben bekomme?
Danke für die schnelle Antwort! Ich habs allerdings jetzt über Shopware()->Front()->Router() gelöst bekommen. Ich weiß nur nicht, ob das in einer Extension von der API total daneben ist…
Ist dein Weg besser?