2012-09-08 2 views
1

Symfony 프레임 워크를 사용하는 프로젝트가 있습니다. 최적화를 위해 요청하는 동안 꾸준히 사용되는 6 개의 공통 변수를 좁혔습니다. 이 변수 중 일부는 데이터베이스 내부에 있습니다.Symfony 컨트롤러 클래스에서 클래스 수준 변수를 사용할 수 있습니까?

이제 데이터베이스를 다시 5 번 방문하여 동일한 값을 얻는 것이 좋습니다. 그래서, 나는 변수 값을 클래스 레벨 변수에 저장하는 것을 고려했다.

좋은 방법입니까?

class MyController extends Controller 
{ 

    /*Class level variables to eliminate repetitive object creation.*/ 
    protected $doctrine; 
+1

이것은 "클래스 수준 변수"(일명 정적 변수)가 아닙니다. 인스턴스 변수입니다. – igorw

+0

/어디에서 어떻게 변수를 공유 하시겠습니까? –

답변

2

컨트롤러와 심포니의 기본 컨트롤러 사이에 extends을 새로 만드는 것이 좋습니다. 이 같은

class YourController extends ApplicationController 

class ApplicationController extends Controller 

과와 ApplicationController가 가질 수 방법 :이처럼

/** 
* @var User 
*/ 
protected $loggedUser = false ; 
protected function getLoggedUserOrNull() 
{ 
    if ($this->loggedUser === false) 
     $this->loggedUser = $this->get("security.context")->getToken()->getUser() ; 
    return $this->loggedUser ; 
} 

이 예는 로그인 한 사용자의 인스턴스가 "캐시"되는 것을 보여줍니다; 그게 네가 필요한 것인가? 당신은 자주 필요한 다른 것들을 위해 같은 생각을 사용할 수 있습니다.

0

물론 좋은 습관입니다. 유일한 약간의 단점은 값을 클래스 변수에 할당 한 시간부터 데이터베이스에 다시 액세스 할 때까지 데이터베이스에서 값이 어떻게 변경되는 경우입니다. 하지만 기회는 매우 희박합니다.

관련 문제