Slim PHP Twig Factory container

Configuring Slim PHP with Twig with Reactjs behavioral

<?php
namespace App\Factory;

use App\Factory\Twig\Extensions\TwigCsrfExtension;
use App\Factory\Twig\Extensions\TwigFiltersAndFunctions;
use App\Factory\Twig\Extensions\TwigImageConverterExtension;
use App\Factory\Twig\Extensions\TwigKintExtension;
use Fullpipe\TwigWebpackExtension\WebpackExtension;  // <---- this is important !!!
use Psr\Container\ContainerInterface;
use Slim\Csrf\Guard;
use Slim\Views\Twig;

class TwigFactory
{
    public $twig;

    public function __construct(ContainerInterface $container)
    {
        $settings = $container->get('settings');
        $twigSettings = $settings['twig'];
        $options = $twigSettings['options'];
        $options['cache'] = $options['cache_enabled'] ? $options['cache_path'] : false;

        $twig = Twig::create($twigSettings['paths'], $options);

        if ($settings['use_kint'] || $options['debug']) {
            $twig->addExtension(new TwigKintExtension);
        }

        $environment = $twig->getEnvironment();

        $twig->addExtension(new TwigFiltersAndFunctions($environment, (array)$settings['assets']));

        $twig->addExtension(new TwigImageConverterExtension);

        // The path must be absolute.
        // e.g. /var/www/example.com/public
        $publicPath = PUBLIC_ROOT; // path to public_html folder or which it is in your situation

        // Add extension Webpack !!!! very important
        $twig->addExtension(new WebpackExtension(
            "{$publicPath}/dist/manifest.json",             // The manifest file.
            $publicPath             // The public path
        ));

        // csrf Guard extension
        $guard = $container->get(Guard::class);

        $twig->addExtension(new TwigCsrfExtension($guard));

        $this->twig = $twig;
    }
}
Last update: Tue, 13 Sep 2022 14:32:15