Update from Slim 3 to 4.11 Error: Entry "App\Action\RootAction" cannot be resolved

Hello everybody,

the update of the dependency from Slim 3 to Slim 4 (4.11) did not work without errors, the following error is displayed:

Entry “App\Action\RootAction” cannot be resolved: Parameter $test of __construct() has no value defined or guessable Full definition: Object ( class = App\Action\RootAction lazy = false __construct( $test = #UNDEFINED# ) )

#0 \vendor\php-di\php-di\src\Definition\Resolver\ObjectCreator.php(156): DI\Definition\Exception\InvalidDefinition::create()
#1 \vendor\php-di\php-di\src\Definition\Resolver\ObjectCreator.php(71): DI\Definition\Resolver\ObjectCreator->createInstance()
#2 \vendor\php-di\php-di\src\Definition\Resolver\ResolverDispatcher.php(71): DI\Definition\Resolver\ObjectCreator->resolve()
#3 \vendor\php-di\php-di\src\Container.php(390): DI\Definition\Resolver\ResolverDispatcher->resolve()
#4 \vendor\php-di\php-di\src\Container.php(139): DI\Container->resolveDefinition()
#5 \vendor\slim\slim\Slim\CallableResolver.php(148): DI\Container->get()
#6 \vendor\slim\slim\Slim\CallableResolver.php(103): Slim\CallableResolver->resolveSlimNotation()
#7 \vendor\slim\slim\Slim\CallableResolver.php(72): Slim\CallableResolver->resolveByPredicate()
#8 \vendor\slim\slim\Slim\Routing\Route.php(366): Slim\CallableResolver->resolveRoute()
#9 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\Routing\Route->handle()
#10 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle()
#11 \vendor\slim\slim\Slim\Routing\Route.php(341): Slim\MiddlewareDispatcher->handle()
#12 \vendor\slim\slim\Slim\Routing\RouteRunner.php(84): Slim\Routing\Route->run()
#13 \src\Middleware\ValidationExceptionMiddleware.php(27): Slim\Routing\RouteRunner->handle()
#14 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(209): App\Middleware\ValidationExceptionMiddleware->process()
#15 \src\Middleware\RateLimitExceededMiddleware.php(26): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#16 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(209): App\Middleware\RateLimitExceededMiddleware->process()
#17 \vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(107): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#18 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(209): Slim\Middleware\ErrorMiddleware->process()
#19 \vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php(59): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#20 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\RoutingMiddleware->process()
#21 \src\Middleware\CorsMiddleware.php(25): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#22 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(209): App\Middleware\CorsMiddleware->process()
#23 \vendor\slim\slim\Slim\Middleware\BodyParsingMiddleware.php(68): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#24 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\BodyParsingMiddleware->process()
#25 \vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(107): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#26 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\ErrorMiddleware->process()
#27 \vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#28 \vendor\slim\slim\Slim\App.php(215): Slim\MiddlewareDispatcher->handle()
#29 \public\index.php(98): Slim\App->handle()

How to fix the issue?

Many greetings,

Your constructor parameter is a not a a class (or interface) and therefore the correct object cannot be injected automatically, because the DI container don’t know what value to pass there.

I would recommend learning more about “Autowiring” first:

To solve your issue, you have multiple options:

  • Declare a specific class or interface (instead of a scalar type)
  • or define a custom DI container definition and create the object by passing the needed values.