2017-09-28 4 views
0

Avec Symfony 3, AppKernel nous permet de définir le répertoire cache avec la méthode AppKernel :: getCacheDir(). Je voudrais configurer le répertoire du cache d'un paramètre:Comment configurer le répertoire cache dans Symfony 3

#app/config/parameters.yml 
parameters: 
    cache_dir: /var/cache/symfony/ 

et mettre en œuvre la AppKernel :: méthode getCacheDir():

#app/AppKernel.php 
class AppKernel extends Kernel 
{ 
    public function getCacheDir() 
    { 
     return $this->getContainer()->getParameter('cache_dir'); 
    } 

Le problème est que le noyau n'est pas démarré lorsque le getCacheDir La méthode() est appelée la première fois.

Call to a member function getParameter() on null

Comment puis-je faire?

Répondre

1

Le conteneur ne peut pas être initialisé avant le démarrage du noyau. Le getCacheDir est appelé lors du démarrage du noyau.

Vous ne pouvez pas accéder au conteneur à ce moment-là.

Vous avez au moins 2 options:

  1. hardcode le chemin dans la fonction sans l'aide de paramètres.
  2. Analysez manuellement le contenu de parameters.yml sans utiliser les services du conteneur (via fgetcontents et un YamlParser instancié manuellement, par exemple).
0

En effet, le conteneur doit également être mis en cache lors de sa création. Vous avez ici un cycle de dépendance invalide. Pour créer le conteneur, vous avez besoin d'une valeur que vous souhaitez obtenir à partir de ce conteneur.

Si le conteneur est déjà généré en cache précédemment, vous voulez savoir où le chercher, mais pour ce faire, vous essayez d'accéder à ce conteneur.

C'est impossible.

0

Vous pouvez mettre en œuvre votre méthode et analyser le fichier directement avec YAML :: parse():

public function getCacheDir() 
{ 
    $value = \Symfony\Component\Yaml\Yaml::parse(file_get_contents(dirname(__DIR__).'/app/config/parameters.yml')); 
    return $value['parameters']['cache_dir']; 
} 
+0

Ceci est une bonne idée, mais les paramètres tels que « '% kernel.project_dir% » ne sont pas remplacés – Arno