Need help for middleware orchestration Twig, Cas, sessionMiddleware

Hello,

I have some difficulties to set elements in correct order for these elements.

If I do that : $app->add(TwigMiddleware::class); the session is not reset but base_path() is empty

And if I do this :

  $app->add(TwigMiddleware::createFromContainer(
    $app,
    \Slim\Views\Twig::class
));

and remove TwigMiddleware from DI, I lost the session elsewhere but the base_path is filled

Can you help me please ?

Some files :

middleware.php

return function (App $app) {
  $settings = $app->getContainer()->get('settings');
  $app->add(Guard::class);
  $app->add(TwigMiddleware::class);
  $app->add(new IpAddress($settings['proxy']['check_proxy_headers'], $settings['proxy']['trusted_proxies']));
  $app->add(new ProxyDetection());
  $app->add(Logger::class);
  $app->add(CasAuth::class);
  $app->add(SessionStartMiddleware::class);
  $app->addRoutingMiddleware();
};

dependencies.php

LoggerInterface::class => function (ContainerInterface $c) {
    $settings = $c->get('settings');

    $loggerSettings = $settings['logger'];
    $logger = new Logger($loggerSettings['name']);

    $processor = new UidProcessor();
    $logger->pushProcessor($processor);

    $handler = new StreamHandler($loggerSettings['path'], $loggerSettings['level']);
    $logger->pushHandler($handler);

    return $logger;
},
App::class => function (ContainerInterface $container) {
    AppFactory::setContainer($container);

    return AppFactory::create();
},
Twig::class => function(ContainerInterface $c) {
    $settings = $c->get('settings')['renderer'];
    $base_url = $c->get('settings')['base_url'];

    $view = Twig::create($settings['template_path'], [
        'cache' => $settings['cache_path'],
    ]);

    $view->addExtension($c->get(CsrfExtension::class));

    $view->getEnvironment()->addGlobal("user", UserHelper::getCurrentUser($c) ?: "");

    //Global version
    $version = $c->get('settings')['displayVersion'] ? \Composer\InstalledVersions::getRootPackage()['pretty_version'] : '';
    $view->getEnvironment()->addGlobal("app_version", $version);
    
    return $view;
},
TwigMiddleware::class => function (ContainerInterface $container) {
    return TwigMiddleware::createFromContainer(
        $container->get(App::class),
        Twig::class
    );
},
PhpRenderer::class => function(ContainerInterface $c) {
    $settings = $c->get('settings')['renderer'];
    $base_url = $c->get('settings')['base_url'];

    $default_args = array('base_url' => $c['request']->getUri()->getBasePath().$base_url);

    return new Slim\Views\PhpRenderer($settings['template_path'], $default_args);
},
CasAuth::class => function(ContainerInterface $c) {
    return new CasAuth($c);
},
SessionManagerInterface::class => function (ContainerInterface $container) {
    return $container->get(SessionInterface::class);
},
SessionInterface::class => function (ContainerInterface $container) {
    $options = $container->get('settings')['session'];
    
    return new PhpSession($options);
},
Guard::class => fn () => new Guard(AppFactory::determineResponseFactory()),
CsrfExtension::class => function (ContainerInterface $c) {
    return new CsrfExtension($c);
},

Finally I found the solution

I kept middleware.php with this init :

$app->add(TwigMiddleware::createFromContainer(
    $app,
    \Slim\Views\Twig::class
));

and I set the session with this : Accessing _SESSION variable in TWIG - #10 by odan