Eigener Service im ScheduledTaskHandler?

In einem Testplugin habe ich einen eigenen Service erstellt. Hier sollen später bestimmte DB-Abfragen etc. hinterlegt.

    <service id="TestPlugin\Util\TestPluginTool">
      <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
      <argument type="service" id="Doctrine\DBAL\Connection"/>
    </service>

In einem eigenen Controller geht das alles wunderbar. Jetzt habe ich zudem noch einen ScheduledTaskHandler. Auch hier wollte ich meinen Service einbinden, komme allerdings gar nicht weiter, weil ich nicht weiß wie ich das machen kann.

Der TaskHandler sieht dabei wie folgt aus:

<?php declare(strict_types=1);

namespace TestPlugin\Service\ScheduledTask;

use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;
use TestPlugin\Util\TestPluginTool;

class ExampleTaskHandler extends ScheduledTaskHandler
{
    public static function getHandledMessages(): iterable
    {
        return [ ExampleTask::class ];
    }

    public function run(): void
    {
        // TestPluginTool ???
    }

}

Im Controller habe ich mein Service so eingebunden:

  public function __construct( Connection $Connection, TestPluginTool $TestPluginTool )
  {
    $this->Connection = $Connection;
    $this->TestPluginTool = $TestPluginTool;
  }

Aber diese Methode scheint im TaskHandler nicht zu gehen. Wie mache ich das hier? Habe auch kein Beispiel gefunden :frowning:

Hi R4M,

hast du denn auch deinen ScheduledTaskHandler korrekt in der services.xml mit der Paramter-Übergabe definiert?

<service id="TestPlugin\Service\ScheduledTask\ExampleTaskHandler">
    <argument type="service" id="TestPlugin\Util\TestPluginTool" />
    <tag name="messenger.message_handler"/>
</service>

So stehen dir dann die Variablen ebenfalls im Konstruktor bereit. Im ScheduledTaskHandler wäre das wie folgt:

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

Hallo,

erst mal Danke für deine Antwort! Ja die services.xml sieht genau so aus. Ich schau mir das noch mal an.

Das funktioniert so nicht, dann startet der Task gar nicht mehr :frowning:

Du extendest den ScheduledTaskHandler. Wenn dieser ebenfalls einen Konstruktor mit Parametern hat, musst du diesen ebenfalls mit den Parametern aufrufen.

…Parent:__construct(…)

Habe es hinbekommen :slight_smile: Danke dir!