2017-09-28 30 views
0

Symfony 3では、AppKernelはAppKernel :: getCacheDir()メソッドでキャッシュディレクトリを定義することができます。 私は、パラメータからのキャッシュディレクトリを設定したいと思います。問題は、ときgetCacheDirカーネルが起動されていないということですSymfony 3でキャッシュディレクトリを設定する方法

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

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

そしてAppKernel :: getCacheDir()メソッドを実装します()メソッドが最初に呼び出されます。

Call to a member function getParameter() on null

私はそれをどのように行うことができますか?

答えて

1

カーネルがブートされる前にコンテナを初期化することはできません。 getCacheDirは、カーネルの起動中に呼び出されます。

その時点でコンテナにアクセスすることはできません。

あなたは、少なくとも2つのオプションがあります:

  1. パラメータを使用せずに関数にパスをハードコーディングします。
  2. parameters.ymlの内容を(fgetcontentsと手動でインスタンス化されたYamlParserを使用して)コンテナからのサービスを使用せずに手動で解析します。
0

コンテナも作成時にキャッシュする必要があるためです。 無効な依存サイクルがあります。コンテナを作成するには、このコンテナから取得する値が必要です。

以前にコンテナがすでに生成されている場合は、そのコンテナにアクセスしようとしている場所を知りたいと思っています。

これは不可能です。

0

あなたのメソッドを実装し、YAMLで直接ファイルを解析::パース()することができます

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

をこれは良いアイデアですが、交換されていない「%kernel.project_dir% '」のようなパラメータ – Arno

関連する問題