You are implement a scheduled task in Shopware 6 and get a weird error message?
-> % ddev console scheduled-task:register
TypeError {#12307
#message: "Return value of Symfony\Component\Messenger\DependencyInjection\MessengerPass::getServiceClass() must be of the type string, null returned"
#code: 0
#file: "./vendor/symfony/messenger/DependencyInjection/MessengerPass.php"
#line: 394
trace: {
./vendor/symfony/messenger/DependencyInjection/MessengerPass.php:394 { …}
./vendor/symfony/messenger/DependencyInjection/MessengerPass.php:86 { …}
./vendor/symfony/messenger/DependencyInjection/MessengerPass.php:71 { …}
./vendor/symfony/dependency-injection/Compiler/Compiler.php:82 { …}
./vendor/symfony/dependency-injection/ContainerBuilder.php:757 { …}
./vendor/symfony/http-kernel/Kernel.php:546 { …}
./vendor/shopware/core/Kernel.php:193 { …}
./vendor/symfony/framework-bundle/Console/Application.php:168 { …}
./vendor/symfony/framework-bundle/Console/Application.php:74 { …}
./vendor/symfony/console/Application.php:171 { …}
./bin/console:74 {
› $application = new Application($kernel->getKernel());
› $application->run($input);
›
arguments: {
$input: Symfony\Component\Console\Input\ArgvInput {#3 …}
}
}
}
}
Then you maybe copied the classnames of your TaskHandler and/or Task with a \
prefix.
This is wrong:
<service id="\My\Module\ScheduledTask\UnpaidOrdersTask">
<tag name="shopware.scheduled.task"/>
</service>
<service id="\My\Module\ScheduledTask\UnpaidOrdersTaskHandler">
<argument type="service" id="scheduled_task.repository"/>
<tag name="messenger.message_handler"/>
</service>
This is correct:
<service id="My\Module\ScheduledTask\UnpaidOrdersTask">
<tag name="shopware.scheduled.task"/>
</service>
<service id="My\Module\ScheduledTask\UnpaidOrdersTaskHandler">
<argument type="service" id="scheduled_task.repository"/>
<tag name="messenger.message_handler"/>
</service>
The difference? The id:
My\Module\ScheduledTask\UnpaidOrdersTask
\My\Module\ScheduledTask\UnpaidOrdersTask
I hope this helps someone 🙂