| 
<?phpuse Slim\{
 App,
 Container
 };
 use ParagonIE\AntiCSRF\AntiCSRF;
 use ParagonIE\CSPBuilder\CSPBuilder;
 use ParagonIE\Discretion\Discretion;
 
 // DIC configuration
 
 /** @var App $app */
 if (!isset($app)) {
 $app = new App();
 }
 if (!($app instanceof App)) {
 throw new TypeError('$app must be an instance of \\Slim\\App.');
 }
 /** @var Container $container */
 $container = $app->getContainer();
 
 /** @var array $settings */
 $settings = $container->get('settings');
 
 try {
 $antiCsrf = new AntiCSRF();
 } catch (\Error $ex) {
 $session = [];
 $antiCsrf = new AntiCSRF($_POST, $session);
 }
 \ParagonIE\Discretion\Discretion::setAntiCSRF($antiCsrf);
 
 $cspBuilder = CSPBuilder::fromData((string) $settings['csp-builder']);
 Discretion::setCSPBuilder($cspBuilder);
 
 /** @var array<string, array<string, string>> $twigSettings */
 $twigSettings = $settings['twig'];
 $twigLoader = new \Twig_Loader_Filesystem((array) $twigSettings['paths']);
 Discretion::setTwig(new \Twig_Environment($twigLoader, (array) $twigSettings['settings']));
 
 $container['view'] =
 /**
 * @param Container $c
 * @return Twig_Environment
 */
 function (\Slim\Container $c) {
 return Discretion::getTwig();
 };
 
 $container['anticsrf'] =
 /**
 * @param Container $c
 * @return AntiCSRF
 */
 function (Container $c): AntiCSRF {
 return Discretion::getAntiCSRF();
 };
 
 $container['csp'] =
 /**
 * @param Container $c
 * @return CSPBuilder
 */
 function (Container $c) {
 return Discretion::getCSPBuilder();
 };
 
 $container['logger'] =
 /**
 * @param Container $c
 * @return \Monolog\Logger
 */
 function (\Slim\Container $c): \Monolog\Logger
 {
 /** @var array<string, array<string, string>> $set */
 $set = $c->get('settings');
 /** @var array<string, string> $settings */
 $settings = $set['logger'];
 $logger = new Monolog\Logger($settings['name']);
 $logger->pushProcessor(new Monolog\Processor\UidProcessor());
 $logger->pushHandler(
 new Monolog\Handler\StreamHandler(
 (string) $settings['path'],
 (int) $settings['level']
 )
 );
 return $logger;
 };
 
 $container['view'] =
 /**
 * @param Container $c
 * @return Twig_Environment
 */
 function (\Slim\Container $c) {
 return Discretion::getTwig();
 };
 
 require_once 'twig.php';
 
 |