Search code examples
bddslimbehatslim-4

How to inject a service into Behat feature context in Slim 4 framework


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.


Solution

  • 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);
            }
         }