# API Route zu erstellen sehr schwer, trotz Docu

**URL:** <https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415>\
**Category:** Programmierung\
**Created:** [27. September 2022 um 17:57 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415 "2022-09-27T17:57:49Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. September 2022 um 17:57 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/1 "2022-09-27T17:57:49Z")

</div>

Mein Versuch eine API Route in die Service Klasse des Plugin hinzufügen schlug fehl. Nach mehreren Stunden kann ich den Fehler nicht mal verstehen.

Ich habe den [Shopware Beispiel aus der on-line docu](https://developer.shopware.com/docs/guides/plugins/plugins/framework/store-api/add-store-api-route) streng befolgt und bekam trotzdem 500 Error, genau in der constructor’s signature der Service Klasse AddDataToPage.php.

`Too few arguments to function September\Service\AddDataToPage::__construct()`

 ![ss-1](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/e/4/e4cb0fc7af98b17532412ceb7e6c620cbb3b137d.jpeg)  
Zusätzlich, mein IDE bringt mir folgede Warnung die ich nicht verstehe:  
`The typehint should be \September\Core\Content\Example\SalesChannel\AbstractProductCountRoute to allow decoration.`  
 ![ss-2](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/3/1/319ec3365cdb4ca22b0f9e1bb0f8ea7ff2a6f06b.jpeg)

Die Anderung des Type Hints von ProductCountRoute auf AbstractProductCountRoute allein ändert nichts (daselbe 500 bleibt)

Hier die Abstract Klasse:

```auto
<?php declare(strict_types=1);

namespace September\Core\Content\Example\SalesChannel;

use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\System\SalesChannel\SalesChannelContext;

abstract class AbstractProductCountRoute
{
    abstract public function getDecorated(): AbstractProductCountRoute;

    abstract public function load(Criteria $criteria, SalesChannelContext $context): ProductCountRouteResponse;
}

```

Hier die Route Klasse die das Abstract extendet:

```auto
<?php declare(strict_types=1);

namespace September\Core\Content\Example\SalesChannel;

use OpenApi\Annotations as OA;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\Plugin\Exception\DecorationPatternException;
use Shopware\Core\Framework\Routing\Annotation\Entity;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Symfony\Component\Routing\Annotation\Route;

/**
 * @Route(defaults={"_routeScope"={"store-api"}})
 */
class ProductCountRoute extends AbstractProductCountRoute
{
    protected EntityRepositoryInterface $exampleRepository;

    public function __construct(EntityRepositoryInterface $exampleRepository)
    {
        $this->exampleRepository = $exampleRepository;
    }

    public function getDecorated(): AbstractProductCountRoute
    {
        throw new DecorationPatternException(self::class);
    }

    /**
     * @Entity("swag_example")
     * @Route("/store-api/example", name="store-api.example.search", methods={"GET", "POST"})
     */
    public function load(Criteria $criteria, SalesChannelContext $context): ProductCountRouteResponse
    {
        return new ExampleRouteResponse($this->exampleRepository->search($criteria, $context->getContext()));
    }
}

```

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [27. September 2022 um 18:02 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/2 "2022-09-27T18:02:38Z")

</div>

AddDataToPage.php in service.xml nochmal überprüfen, ob alles richtig gemacht wurde.

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. September 2022 um 18:04 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/3 "2022-09-27T18:04:30Z")

</div>

Ist OK:

```auto
   <services>
        <service id="September\Service\AddDataToPage" >
            <argument type="service" id="September\Core\Content\Example\SalesChannel\ProductCountRoute"/>
            <tag name="kernel.event_subscriber" />
        </service>
    </services>

```

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [27. September 2022 um 18:06 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/4 "2022-09-27T18:06:33Z")

</div>

Sieht ok aus. Hast du auch den Cache geleert?

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. September 2022 um 18:52 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/5 "2022-09-27T18:52:16Z")

</div>

Ja. Das tue ich über admin Settings.

Noch eine Frage: die abstract Klasse wird im Constructor mit **EntityRepositoryInterface** initalisiert. Das steht in der Docu. Aber mein IDE zeigt **EntityRepositoryInterface** als deprecated. Kann es zum Problem werden? Wie machen es andere Developer?

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [27. September 2022 um 20:25 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/6 "2022-09-27T20:25:58Z")

</div>

Versuch auch Mal den Cache Ordner zu leeren.

EntityRepositoryInterface ist deprecated und wahrscheinlich mit Shopware 6.5 entfernt, siehe auch das Interface selbst an. Bis dahin sollte es keine Probleme geben.

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. September 2022 um 21:51 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/7 "2022-09-27T21:51:22Z")

</div>

Danke für Deine Zeit.  
Cache leeren und .xml checken sind standards, die habe gemacht bevor ich Forum Message geschrieben habe.

Die [Doku Seite](https://developer.shopware.com/docs/guides/plugins/plugins/framework/store-api/add-store-api-route) von Shopware ist 6 Tage alt (s. Footer dort) und trotzdem empfehlen sie in den Beispielen deprecated usage von **EntityRepositoryInterface**  
OK das ist aber ein anderes Thema.  
Habe keine Ahnung wie komme ich weiter.

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [27. September 2022 um 23:00 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/8 "2022-09-27T23:00:14Z")

</div>

Autoload in der composer.json mit dem Namespace und Ordnerpfad sind richtig?

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. September 2022 um 23:10 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/9 "2022-09-27T23:10:24Z")

</div>

Ich weiß es nicht wie ich es prüfen kann. Der ganze Shop funktioniert (ohne Plugin) einwandfrei.  
Hier der relevante Eintrag:

```auto
  "autoload": {
    "psr-4": {
      "September\\": "src/"
    }

```

---

<div class="post-metadata">

**Author:** ![FritzPerson](https://avatars.discourse-cdn.com/v4/letter/f/85e7bf/32.png) [@FritzPerson](https://forum.shopware.com/u/FritzPerson)\
**Post date:** [5. Oktober 2022 um 14:05 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/10 "2022-10-05T14:05:54Z")

</div>

Hallo, ich hatte das mal gemacht, aber api nicht store-api und ich hab `implements AbstractController` gemacht, nicht eine eigene abstrakte Klasse.

Ich will jetzt nicht den ganzen Code kopieren, aber im Grunde so:

```auto
/**
 * @Route(defaults={"_routeScope"={"api"}})
 */

class MyController extends AbstractController {

 /*
  * @Route ("/api/my-api-extension", name="api.my.extension", methods={"POST"}) 
  */
    public function my_api_extension (Request $request, Context $context) : JsonResponse {

      return new JsonResponse();
   }
}

```

In config/routes.xml:

```auto
<import resource="../../Controller/MyController.php" type="annotation" />

```

In config/services.xml:

```auto
<service id="MyPlugin\Controller\MyController" public="true">
  <call method="setContainer">
    <argument type="service" id="service_container"/>
  </call>
</service>

```

Wegen **EntityRepositoryInterface** soll man jetzt **EntityRepository** verwenden. Also ich denke einfach im Constructor + protected Variable ändern, dann müsste es gehen.

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [12. Oktober 2022 um 22:54 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/11 "2022-10-12T22:54:34Z")

</div>

Vielen Dank für Dein Feedback. Auch mit EntityRepository von DataAbstractionLayer habe ich auch probiert, leider ohne Erfolg.

Ich wollte möglichst treu den Beispiel aus der Docu folgen, weil als Anfänger soll ich nicht zu viel experimentieren. Daher habe ich Dein Code nicht übernommen. Die Dokumentation enttäuscht aber.

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [13. Oktober 2022 um 08:13 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/12 "2022-10-13T08:13:19Z")

</div>

Manchmal hilft es, einen Neustart zu machen und von neuem anzufangen. Ich würde dir empfehlen die Dokumentation von neu zu beginnen und dabei auch die von Shopware empfohlenen Konventionen einzuhalten, z. B. Plugin Präfix (könnte bei dir z. B. Iteam sein).

Ansonsten versuch doch manuell den Cache Ordner zu leeren.

---

<div class="post-metadata">

**Author:** ![FSA](https://avatars.discourse-cdn.com/v4/letter/f/e9a140/32.png) [@FSA](https://forum.shopware.com/u/FSA)\
**Post date:** [27. Oktober 2022 um 08:21 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/13 "2022-10-27T08:21:09Z")

</div>

du musst das EntityRepositoryInterface als Argument in der service.xml angeben, das besagt auch deine Fehlermeldung

„too few arguments, 1 expected“

allerdings ist auch das nicht zwingend notwendig, da der Controller Zugriff auf $this-\>container haben sollte. Das Container Objekt lässt dich wiederrum auf verschiedenste Daten zugreifen, bspw. Repos über die DAL abzurufen.

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. Oktober 2022 um 14:25 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/14 "2022-10-27T14:25:08Z")

</div>

Wertvoller Hinweis, danke. Zwar habe ich schon den plugin auf dem Server gelöscht, werde aber aus backup reaktivieren.

---

<div class="post-metadata">

**Author:** ![shopwarer1638](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@shopwarer1638](https://forum.shopware.com/u/shopwarer1638)\
**Post date:** [24. März 2023 um 06:26 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/15 "2023-03-24T06:26:57Z")

</div>

Hallo @iteam , haben Sie eine Lösung gefunden? Ich habe hier ein ähnliches Problem mit Beispielen aus der offiziellen Shopware 6 Dokumentation:

„Too few arguments to function March\Core\Content\Example\SalesChannel\ProductCountRoute::\_\_construct(), 0 passed in /chroot/home/…/…/html/vendor/shopware/core/Framework/DependencyInjection/CompilerPass/EntityCompilerPass.php on line 50 and exactly 1 expected“

---

<div class="post-metadata">

**Author:** ![iteam](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/iteam/32/17249_2.png) [@iteam](https://forum.shopware.com/u/iteam)\
**Post date:** [27. März 2023 um 15:40 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/16 "2023-03-27T15:40:28Z")

</div>

Lösung nicht gefunden, sorry. Wir haben dann nicht weiter gemacht.

---

<div class="post-metadata">

**Author:** ![shopwarer1638](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@shopwarer1638](https://forum.shopware.com/u/shopwarer1638)\
**Post date:** [31. März 2023 um 09:41 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/17 "2023-03-31T09:41:00Z")

</div>

Kann vielleicht jemand vom Shopware-Team helfen?

Ich habe mehrmals versucht, es zu implementieren, habe schon zwei Wochen lang gegoogelt und kann es immer noch nicht mit dieser Dokumentation zum Funktionieren bringen:

> **[Add data to storefront page](https://developer.shopware.com/docs/guides/plugins/plugins/storefront/add-data-to-storefront-page)**

Ich kann nicht weitermachen, weil dieser Fehler auftritt:  
„Too few arguments to function CustomFilter\Core\Content\Example\SalesChannel\ProductCountRoute::\_\_construct(), 0 passed in /chroot/home/domain.de/html/vendor/shopware/core/Framework/DependencyInjection/CompilerPass/EntityCompilerPass.php on line 50 and exactly 1 expected“

Dieses Tutorial funktioniert gut (ich habe es bis zum Caching fertiggestellt), aber es hat eine etwas andere Struktur und ich konnte es nicht mit einem früheren Tutorial verbinden:

> **[Add store API route](https://developer.shopware.com/docs/guides/plugins/plugins/framework/store-api/add-store-api-route)**

Wie können wir das lösen?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [31. März 2023 um 10:29 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/18 "2023-03-31T10:29:12Z")

</div>

Deine \_\_construct hat kein Argument. Du musst ein Argument mit übergeben, wie in dem verlinkten Beispiel der Fall; natürlich auf deine Werte angepasst:

```auto
public function __construct(AbstractExampleRoute $route)
    {
        $this->route = $route;
    }

```

---

<div class="post-metadata">

**Author:** ![shopwarer1638](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@shopwarer1638](https://forum.shopware.com/u/shopwarer1638)\
**Post date:** [31. März 2023 um 14:14 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/19 "2023-03-31T14:14:38Z")

</div>

Danke @Max_Shop , hier ist, was ich für der Klasse habe:

```auto
class ProductCountRoute extends AbstractProductCountRoute
{
    protected EntityRepository $productRepository;

    public function __construct(EntityRepository $productRepository)
    {
        $this->productRepository = $productRepository;
    }

```

und ich route ihn so, aber er kommt nicht an:

```auto
<service id="CustomFilter\Service\AddDataToPage" >
    <argument type="service" id="CustomFilter\Core\Content\Example\SalesChannel\ProductCountRoute"/>
    <tag name="kernel.event_subscriber" />
</service>

<service id="CustomFilter\Core\Content\Example\SalesChannel\ProductCountRoute">
    <argument type="service" id="product.repository"/>
    <tag name="shopware.entity.definition" entity="swag_get_active_product_count" />
</service>

```

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [1. April 2023 um 10:50 UTC](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415/20 "2023-04-01T10:50:30Z")

</div>

Wieso taggst du die Route denn als `shopware.entity.definition`?  
Nimm das mal raus.

[Nächste Seite](https://forum.shopware.com/t/api-route-zu-erstellen-sehr-schwer-trotz-docu/96415.md?page=2)
