2010-06-01 16 views
5

Ich habe versucht, einen Weg zu finden, um die Ausgabe (gerenderte Ansicht) einer anderen Aktion innerhalb der aktuellen Aktion zu erfassen ... etwas ähnlich wie die Ausgabe Pufferung.Erfassung der Ausgabe einer anderen Aktion innerhalb der aktuellen Aktion?

Das Szenario ist, dass ich einen "Snapshot" eines Berichts speichern muss. Die Daten, die im Bericht verwendet werden, ändern sich ständig, und aus welchen Gründen auch immer muss ich die Ansichts-HTML-Datei speichern und nicht nur ein Datenfeld. Ich habe eine snapshotAction() erstellt, und ich möchte irgendwie die Ausgabe der separaten reportAction() darin erfassen. Ich möchte die reportAction() nicht auf dem Bildschirm rendern, ich möchte, dass sie in meiner aktuellen Aktion rendert, bevor die Aktion abgeschlossen ist.

Gibt es eine Möglichkeit, dies in ZF zu tun?


korrekt von Benedikt Cohen unten beantwortet, aber ich habe es nicht erkennen, bis ich diese Nutzung in den Mailinglisten-Archive ZF sah: How to render multiple action views?

ich etwas mit ähnlich:

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

Antwort

7

Es gibt eine view helper called 'action', die hilfreich sein kann. Sie geben den Controller und die Aktion und die Parameter an und geben das Ergebnis zurück. Der Helfer erstellt eine neue Dispatch-Schleife. Wenn Sie sie also häufig verwenden, kann dies Auswirkungen auf die Leistung haben (ich mache mir keine Gedanken über die Leistung, bis Anzeichen dafür vorliegen, dass es Probleme verursacht).

+0

Eine neue Dispatch-Schleife ist genau das, was ich brauche, aber ich hätte gerne einen Weg, dies innerhalb der Controller-Aktion zu tun, aus zwei Gründen: Ich möchte die Snapshot-Ansicht nicht wirklich rendern (um sie zu einem AJAX zu machen) Anruf, tut mir leid, ich habe vergessen, das zu erwähnen), und ich würde auch die Berichtsansicht von der Schnappschussansicht verarbeiten/speichern müssen, die MVC-Konvention bricht. Es würde jedoch funktionieren, nur geschockt, dass Sie es nicht vom Controller aus tun können. – wizzard

+0

Ich nehme es zurück. Ich dachte nicht, dass du das aus irgendeinem Grund vom Controller aus anrufen könntest, aber es funktioniert perfekt. Bearbeite meine Frage mit spezifischerem Code. – wizzard

Verwandte Themen