Add Custom Service
In this guide you'll learn how to create a custom service using the Symfony DI Container.
Prerequisites
This guide builds on the Plugin Base Guide.
Register a service
Create a services.php file at src/Resources/config/services.php in your plugin.
<?php declare(strict_types=1);
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $configurator): void {
$services = $configurator->services();
};There are two approaches:
Using autowire and autoconfigure
Set autowire and autoconfigure to true in your services.php file. Symfony will then automatically register your service. Read more about it in the Symfony docs.
<?php declare(strict_types=1);
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $configurator): void {
$services = $configurator->services()
->defaults()
->autowire()
->autoconfigure();
$services->load('Swag\\BasicExample\\', '../../')
->exclude('../../{Resources,Migration,*.php}');
};Now every PHP class in the src directory of your plugin will be registered as a service. The directory Resources and Migration are excluded, as they usually should not contain services.
Explicit declaration
Instead of autowiring and autoconfiguring, you can also declare your service explicitly. Use this option if you want to have more control over your service.
<?php declare(strict_types=1);
use Swag\BasicExample\Service\ExampleService;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $configurator): void {
$services = $configurator->services();
$services->set(ExampleService::class);
};Actual service class
Example service class:
<?php declare(strict_types=1);
namespace Swag\BasicExample\Service;
class ExampleService
{
public function doSomething(): void
{
...
}
}INFO
By default, all services in Shopware 6 are marked as private. Read more about private and public services.
Alternatives to PHP configuration
Symfony supports two other file formats to define your services: YAML and XML. However, starting with Symfony 7.4, XML service configuration has been deprecated, and it will no longer be supported in Symfony 8.0.
Next steps
You can apply the same approach to register other plugin classes, such as commands, scheduled tasks, or a subscriber to listen to events.
See also: Adjusting a service.