Class used for service cannot be found

Hallo, mitten im laufenden Betrieb vermeldete ein Plugin folgende Errormeldung:

 Class "WtCustomerRegistration\Subscriber\CustomerRegistration" used for service "WtCustomerRegistration
  \Subscriber\CustomerRegistration" cannot be found.

Es lief bereits mit folgender Konfiguration:
composer.json:

{
    "name": "wt-customer-registration/wt-customer-registration",
    "description": "Deactivate customer account",
    "authors": [
        {
            "name": "Kipp,Thomas",
            "email": "thomas.kipp@webthinker.de",
            "homepage": "https://tklustig.de",
            "role": "Developer"
        }
    ],
    "type": "shopware-platform-plugin",
    "version": "1.0.0",
    "license": "MIT",
    "require": {
        "shopware/core": "6.*.*"
    },
    "extra": {
        "shopware-plugin-class": "WtCustomerRegistration\\WtCustomerRegistration",
        "label": {
            "de-DE": "Product Registration Plugin",
            "en-GB": "Product Registration Plugin"
        }
    },
    "autoload": {
        "psr-4": {
            "WtCustomerRegistration\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "WtCustomerRegistration\\Tests\\": "tests/"
        }
    }
}

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="WtCustomerRegistration\Subscriber\CustomerRegistration">
            <argument type="service" id="WtCustomerRegistration\Service\Mailer"/>
            <argument type="service" id="WtCustomerRegistration\Service\ContactDatabase"/>
            <tag name="kernel.event_subscriber"/>
        </service>
        <service id="WtCustomerRegistration\Service\Mailer">
          <argument id="Shopware\Core\Content\MailTemplate\Service\MailService" type="service"/>
        </service>
        <service id="WtCustomerRegistration\Service\ContactDatabase">
            <argument type="service" id="customer.repository"/>
        </service>
    </services>
</container>

Subscriber:

<?php declare(strict_types=1);

namespace WtCustomerRegistration\Subscriber;

use Symfony\Component\HttpFoundation\Response;
use Shopware\Core\Checkout\Customer\Event\CustomerRegisterEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use WtCustomerRegistration\Service\Mailer;
use WtCustomerRegistration\Service\ContactDatabase;
use DateTime;
use DateInterval;
use Throwable;

/**
 *
 */
class CustomerRegistration implements EventSubscriberInterface
{
...
}

Es ist eine 1:1 Kopie meines lokalen Entwicklungsservers, wo alles famos läuft. Wie kommt es zu dieser Fehlermeldung?

Was auch immer der Grund war, ich habe es jetzt gefixt, indem ich einfach meine funktionierende Entwicklungsversion wieder hochgeladen habe. Der Error ist weg.
Allerdings wurde in der Shopware6.3 Version noch ein Interface und eine Mailer Klasse verwendet. Ab Shopware6.5 gibt es kein Mail Interface mehr. Meine services.xml hat sich nicht verändert. Ich frage mich allerdings, was ich jetzt über eine DPI einlesen soll: Das Interface oder die Klasse, also so:

<?php

namespace WtCustomerRegistration\Service;

use Shopware\Core\Content\MailTemplate\Service\**MailService**;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Symfony\Component\HttpFoundation\ParameterBag;
use DateTime;
use DateInterval;
use Exception;


class Mailer
{
    private **MailService** $mailService;


    public function __construct(**MailService** $mailService)
    {
        $this->mailService = $mailService;
    }


    /**
     * @param SalesChannelContext $salesChannelContext
     * @param string $subject
     * @param string $content
     * @param array $recipients
     * @return bool
     */
    public function sendMail(SalesChannelContext $salesChannelContext, string $subject, string $content, array $recipients): bool
    {
...
}

oder so:

<?php

namespace WtCustomerRegistration\Service;

use Shopware\Core\Content\MailTemplate\Service\**MailServiceInterface**;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Symfony\Component\HttpFoundation\ParameterBag;
use DateTime;
use DateInterval;
use Exception;


class Mailer
{
    private **MailServiceInterface** $mailService;


    public function __construct(**MailServiceInterface** $mailService)
    {
        $this->mailService = $mailService;
    }


    /**
     * @param SalesChannelContext $salesChannelContext
     * @param string $subject
     * @param string $content
     * @param array $recipients
     * @return bool
     */
    public function sendMail(SalesChannelContext $salesChannelContext, string $subject, string $content, array $recipients): bool
    {
...
}

Fürs 6.5? Da wird wohl die abstract Klasse verwendet

private readonly AbstractMailService $emailService

Sorry, das war wohl missverständlich formuliert: Ich benötige diejenige Klasse, die für Shopware6.3.30 verwendet wird:

das Interface oder die Klasse, also so:

       <service id="WtCustomerRegistration\Service\Mailer">
            <argument id="Shopware\Core\Content\MailTemplate\Service\MailServiceInterface" type="service"/>
        </service>

oder so

       <service id="WtCustomerRegistration\Service\Mailer">
            <argument id="Shopware\Core\Content\MailTemplate\Service\MailService" type="service"/>
        </service>

Diese Klasse implementiert die Versandmethode nicht. Genau so wenig wie das Interface. Sollte man nicht diejenige Klassse verwenden, die die Versandmethode implementiert?

Ach so, Du brauchst es für den 6.3? Das hab ich falsch verstanden. Da müsstest Du mal im Code in den originalen xml-Dateien schauen.

Was denn für XML Dateien??
Mit dieser service.xml klappt durch DPI der Mailversand:

<?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="WtCustomerRegistration\Subscriber\CustomerRegistration">
            <argument type="service" id="WtCustomerRegistration\Service\Mailer"/>
            <argument type="service" id="WtCustomerRegistration\Service\ContactDatabase"/>
            <tag name="kernel.event_subscriber"/>
        </service>
        <service id="WtCustomerRegistration\Service\Mailer">
            <argument id="Shopware\Core\Content\MailTemplate\Service\MailService" type="service"/>
        </service>
        <service id="WtCustomerRegistration\Service\ContactDatabase">
            <argument type="service" id="customer.repository"/>
        </service>
    </services>
</container>

Die für die DI, da kann man ja schauen, wie Shopware das macht. Im 6.5 ist das in vendor/shopware/storefront/DependencyInjection, ich meine im 6.3 war es aber noch woanders.

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