2012-07-24 4 views
6

내 parameters.ini 파일에 값이 저장되어 있으며 내 모델의 prepersist 메서드에서 액세스해야합니다.엔터티 클래스의 Symfony2 전역 매개 변수에 액세스

일반적으로 $this->container->getParameter('value');을 사용하지만 컨테이너는 엔티티에서 사용할 수 없습니다.

엔티티 클래스 내에 매개 변수를 가져 오는 방법이 있습니까?

P. 이 값은 prepersist 중에 정보를 가져 오는 서비스의 API 키입니다. 가장 좋은 방법은 parameters.ini에 키/암호를 유지하는 것입니다.

답변

8

최상의 방법은 엔티티를 유지하는 서비스를 사용하는 것입니다. 이 경우 컨테이너에을 삽입하고 updateMyEntity() 서비스 방법으로 전화 할 때 매개 변수를 설정하십시오. UserService 내부

$user = new User('foo'); 
$user->setSomeProperty('bar'); 
$userService->update($user); 

: 컨트롤러 (또는 무엇이든 당신이 원하는) 내부

플로랑의 대답에 추가

public function update(User $user) { 
    $user->setSomeParameter($this->container->getParameter('value')); 
    $this->em->persist($user); 
} 
+1

이 기본 기능 (글로벌 매개 변수)을 얻고 싶습니다. – MrGlass

+3

S2는 전역 공간에 매개 변수를 노출하지 않습니다. 정말로 $ kernel에 접근하여 거기에서 꺼내야 할 필요가 있다면. 하지만 정말로 서비스를 사용해야합니다. – Cerad

4

는, 엔티티는 순수 데이터 객체로 의미가있다. 그들은 당신의 어플리케이션 내에서 다른 변수들 또는 서비스들에 관해서는 알지 못한다. 에 대해 궁금한 점이 있으십니까 엔티티가 시스템 전체의 API 키에 대해 알아야 할 필요가 있습니다. 배경 정보가 거의 없으므로 내가하려는 일을 재고해야한다고 말하고 싶습니다.

컨테이너를 통해 이상적으로 구성된 API와 상호 작용하는 서비스가 필요합니다. 나는 그것이 엔티티와 어떤 관계가 있는지 보지 못합니다.

+0

좋은 추가, 고마워. – Florent

+0

나는 prepersist 동안 입력 된 lysysical 위치의 lat/long을 당기고있다. – MrGlass

+2

서비스로 계속 할 수 있습니다. 다음은 정확하게 수행하는 번들입니다 : https://github.com/dustin10/VichGeographicalBundle - 이벤트를 사용하여 좌표를 추가해야하는 엔티티가 있는지 확인한 다음 저장 될 때 쿼리하고 업데이트합니다. 희망이 도움이됩니다. –

관련 문제