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.
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');
}
Tout est mit en cache.
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
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)