Bonjour,

Je suis entrain de tester la mise en cache mon site web. Je veux mettre en cache l'injection de dépendance. J'utilise le container php-di dans mon projet. Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'active la mise en cache si la variable APP_ENV est disponible si non je met en mode pridution. Dans ma classe App.php j'ai ce code :

 $env = getenv('APP_ENV') ?? 'production';
            if ($env === 'production') {
                $builder->enableCompilation(dirname(dirname(__DIR__)) . '/tmp/di');
                $builder->writeProxiesToFile(true,  __DIR__ . 'tmp/proxies');
            }

Ce que je veux

Tout est mit en cache.

Ce que j'obtiens

J'obtiens ces erreur :
Notice: Only variables should be passed by reference in /var/www/sandbox.test/mywebmodules/tmp/di/CompiledContainer.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /var/www/sandbox.test/mywebmodules/tmp/di/CompiledContainer.php:239) in /var/www/sandbox.test/mywebmodules/vendor/http-interop/response-sender/src/functions.php on line 20

Je comprend bien que les headers sont déjà envoyer. Dans mon projet j'utlise la session php. Je dit à php-di voici comment construir la classe qui s'occupe des session :

return [
SessionInterface::class => autowire(PHPSession::class),
]

Dabns la classe PHPSession j'ai cette fonction qui s'occupe de vérifié si la session est déjà activer ou pas :

private function ensureStarted()
    {
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }
    }

    //Dans mes autre methode get() set() delete de ma classe
    public function get(string $key, $default = null) {
    $this->ensureStarted();
    // ... code
    }

Comment je peut dire à php-di de ne pas essayer de rechecharger les session si cela est déjà charger.

Merci de votre aide

2 réponses


Bonsoir,
je suis actuellement sur le même soucis, l'erreur viens du passage de $session par référence dans le __construct() de CSRFMiddleware ( je suppose que tu suit la formation POO)

si tu enlève le fameux & ça remarche, sauf pour les tests, où ici j'ai ajouter un getter de la session ( pour le moment je n'ai pas trouvé d'autre solution)

Bonjour,
Avez-vous trouvé une solution à ce problème ?

Bonne soirée.