When I search for service injection to feature context I always find extensions for symfony. But I need extension or something else to do this in Slim 4 framework.
Thank you.
I solved this problem using a trait.
// src/Application/Utility/ContainerInjection.php
use DI\Container;
use DI\ContainerBuilder;
trait ContainerInjection
{
/**
* @return Container
*/
public function getContainer()
{
// To find project base path
// according to path where trait is found
$path_main = __DIR__ . '/../../../';
// Instantiate PHP-DI ContainerBuilder
$containerBuilder = new ContainerBuilder();
$settings = require $path_main . 'app/settings.php';
$dependencies = require $path_main . 'app/dependencies.php';
$settings($containerBuilder);
$dependencies($containerBuilder);
// Build PHP-DI Container instance
return $containerBuilder->build();
}
}
To use this trait in FeatureContext
class FeatureContext implements Context
{
use ContainerInjection;
private $myService;
public function __construct()
{
$container = $this->getContainer();
$this->myService = $container->get(MyService::class);
}
}