2010-06-01 10 views
5

Próbowałem znaleźć sposób przechwytywania danych wyjściowych (renderowanego widoku) innej akcji w ramach bieżącej akcji ... czegoś podobnego do buforowania wyjściowego.Przechwytuje wyjście innej akcji w ramach bieżącej akcji?

Scenariusz jest taki, że muszę zapisać "migawkę" raportu. Dane używane w raporcie ciągle się zmieniają iz jakiegokolwiek powodu muszę faktycznie zapisać HTML widoku, a nie tylko tablicę danych. Stworzyłem snapshotAction() i chcę jakoś uchwycić wynik oddzielnej funkcji reportAction() w jej obrębie. Nie chcę renderować funkcji reportAction() na ekranie, chcę ją wyrenderować w ramach bieżącej akcji przed zakończeniem działania.

Czy można to zrobić w ZF?


poprawnie odbierane przez Benedykta Cohen poniżej, ale nie zdaje sobie sprawy, dopóki nie zobaczyłem tego Zastosowanie w ZF lista dyskusyjna Archives: How to render multiple action views?

Używam coś podobnego:

public function snapshotAction() { 
    $content = $this->view->action('run', 'report'); 
    ...etc... 
} 

Odpowiedz

7

Istnieje jeden view helper called 'action', który może być pomocny. Użytkownik określa kontroler, działanie i parametry i zwraca wynik. Pomocnik tworzy nową pętlę ekspedycyjną, więc jeśli dużo jej użyjesz, może to mieć wpływ na wydajność (nie martwię się wydajnością, dopóki nie pojawią się dowody na to, że powoduje ona problemy).

+0

Nowa pętla ekspedycyjna jest dokładnie tym, czego potrzebuję, ale chciałbym jakoś to zrobić w akcji kontrolera, z dwóch powodów: nie chcę renderować widoku migawki (planuję zrobić to AJAX zadzwoń, przepraszam, zapomniałem o tym wspomnieć), a także musiałbym przetworzyć/zapisać widok raportu z widoku migawki, który niszczy konwencję MVC. To zadziałało, po prostu zszokowane, że nie możesz tego zrobić od kontrolera. – wizzard

+0

Odzyskuję. Nie sądziłem, że możesz to nazwać z kontrolera z jakiegoś powodu, ale działa idealnie. Zmodyfikuje moje pytanie za pomocą bardziej szczegółowego kodu. – wizzard