2014-03-06 3 views
0

제대로 설정해야하는 컨테이너 매개 변수를 설정하는 가장 좋은 방법은 무엇입니까? 'service_filesystem_cache_path'라는 문자열 ('% kernel.cache_dir %'+/디렉토리 위치 문자열)을 일부 서비스 클래스에 주입하고 있습니다.디렉토리가 sf2 컨테이너 매개 변수로 사용되기 전에 존재해야합니다.

나는 그 수업에서 실존을 점검하고 더 좋은 방법이 있는지 알고 싶다.

내 번들의 컨테이너 확장을 변경하려고했지만 매개 변수가 그때까지 해결되지 않은 것처럼 보입니다. 아직 정규화 된/컴파일 된 경로 대신 '% kernel.cache_dir %/feeds'가 표시됩니다. , 번들 클래스에서 시도

빌드 방법 (단지 부모 후 : 빌드 ($ 용기)에 컨테이너,은 "커널"서비스와 매개 변수가 그 시점에서, 그다지 나에게 도움이되지 않습니다.

+2

당신은 [캐시 워머]을 만들 수를 예열되지 않은 캐시의 경우 치명적인 오류를 방지하는 것을 mentionning 가치 (http://symfony.com/doc/current/reference/dic_tags.html#kernel-cache-warmer) – Touki

+0

고마워, 지금 당장하고있어. –

답변

2

이 질문에

이 할 수있는 reasonnable 방법을 괜찮은 답장을 가지고 대답에 내 의견을 변환하는 Cache Warmer을 만드는 것입니다
kernel.cache_warmer

services.yml

services: 
    acme_foo.my_warmer: 
     class: Acme\FooBundle\CacheWarmer 
     arguments: 
      - @filesystem 
     tags: 
      - name: kernel.cache_warmer 
      - priority: 0 

따뜻한 캐시가 CacheWarmerInterface를 구현해야합니다 그것을 당신이 새로운 서비스를 만들 필요가 이렇게하고, 태그를합니다. 이 구성 요소를

namespace Acme\FooBundle; 

use Symfony\Component\Filesystem\Filesystem; 
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface 

class CacheWarmer implements CacheWarmerInterface 
{ 
    protected $filesystem; 

    public function __construct(Filesystem $filesystem) 
    { 
     $this->filesystem = $filesystem; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function warmUp($cacheDir) 
    { 
     $real = sprintf("%s/feeds", $cacheDir); 

     $this->filesystem->mkdir($real); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function isOptional() 
    { 
     return true; 
    } 
} 

, 당신은 cache:clear(--no-워밍업없이) 실행할 때 /feeds이 생성 될 디렉토리 또는 cache:warmup 명령.

그것은 당신이 디렉토리가 존재 응용 프로그램에서 확인 할 수있다

$filename = "/cache/dir/feeds/file"; 

if (!is_dir(dirname($filename))) { 
    mkdir(dirname($filename)); 
} 
0

Touki 말했듯이, 따뜻한 캐시가 트릭을 할 수 있습니다.