0

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.

Furkan
  • 415
  • 5
  • 17

1 Answers1

0

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);
        }
     }
Furkan
  • 415
  • 5
  • 17