2010-06-29 4 views
0

작업에서 작업의 출력을 캡처 할 수 있습니까?Symfony 작업 : 모듈/작업의 출력 얻기

예 :

FooAction 
{ 
    executeIndexSuccess() 
} 

내 작업에

:

FooAction-> 색인

이 가능합니까?

+0

이 코드를 많은 상황에서 사용하면 모델에 넣는 것이 좋습니다. –

답변

3

예. 당신의 작업의 execute() 방법 :

sfContext::createInstance($this->configuration); 
$output = sfContext::getInstance()->getController()->getPresentationFor("module", "action"); 

작업 및 관련보기에서 결과의 출력은 $output에 저장됩니다. 액션이 세션에 설정 변수를 필요로하는 경우

, 당신도 할 수 같은 것들 :

sfContext::getInstance()->getUser()->setAttribute("mySessionVar", 123); 
sfContext::getInstance()->getUser()->setFlash("myFlashVar", "foo"); 

당신이 변수가 존재하는 동작이 실행되도록 getPresentationFor()를 호출하기 전에

.

2

작업에서이 작업을 수행해서는 안됩니다. 컨트롤러 동작은 이러한 목적으로 빌드되지 않습니다. 컨트롤러를 리팩토링하십시오. 작업과 공유해야하는 코드를 별도의 클래스로 추출하고이 클래스를 작업 및 작업에 사용하십시오! sfContext는 신뢰할만한 정보 소스가 아닙니다. 이 개체의 내용은 응용 프로그램이 시작되는 방식에 따라 다릅니다 (Commandline! = HTTP)

+0

sfContext가 신뢰할 수 없거나 이상적이지 않습니다. 올바른 것입니다. 그러나 작업에서 컨트롤러 출력을 얻는 데는 많은 응용 프로그램이 있다고 생각합니다. 표준 레이아웃 데코레이터를 사용하는 자동 HTML 전자 메일은 마음을 사로 잡는 한 가지 예입니다. 당신은 MVC 스타일의 구조를 사용할 수도 있습니다 :-) – richsage

+0

그게 정확히하고 싶은 일입니다 : 나는 데이터베이스에있는 것을 기반으로 이메일을 보낼 작업을 만들고 싶습니다. 그리고 이것은 실행됩니다. cron 스크립트에서. 기본적으로 비동기 방식으로이 작업을 수행하십시오. "MVC 스타일의 구조를 사용하면 정확히 무엇을 언급하고 있습니까? – Paul

+0

당신은 HTML 전자 메일에 적합합니다. Symfony의 일부보기 부분과 sfContext도 필요합니다. 당신은 전자 메일을 보내고 싶습니다. Action-Method를 사용하는 Task Insteas에서 부분 렌더링을 선호하므로 요청/응답 처리에 의존하지 않고 템플릿을 사용하여 전자 메일을 생성 할 수 있습니다. – Timo