2016-04-11 2 views
1

Ich habe keinen vollen ZF2-Stack, aber ich habe meinen meist nicht-ZF2-Code manipuliert, um die Methoden $this->partial() und ViewModel() zu akzeptieren.Wie kann ich eine View Helper-Variable an ein entferntes View-Kind in ZF2 propagieren, ohne Pass-Through-Code zu verwenden?

Ich finde oft eine Situation, in der ich einen Baum von View Helper Partials habe, zu dem ein ferne Wurzel-Kind eine Variable someVar benötigt.

Ich verwalte diese Variable, die es durch jede partial von Root zum Kind, auch wenn die In-Route-Partials haben es nicht nötig.

Gibt es eine Möglichkeit, die Var nicht zu verwalten?

Beispiel

//controller.php 
echo $this->partial('root.phtml', array('someVar' => $someVar)); 
//root.phtml 
<? 
    //this variable-pass-through-only step is one I would like to eliminate. 
    //aka. here someVar is not itself used in root.phtml 
    //it is only passed onto the child view partial 
    //I want to eliminate this pass-through-only code. 

    echo $this->partial('child.phtml', array('someVar' => $this->someVar)): 
?> 
//child.phtml - leaf child 
<? 
    //variable is actually used for display purpose 
    echo $this->someVar; 
?> 

Ich bin zu öffnen, die Antworten nicht verwenden partial Konstrukt, dh ViewModel usw.

Hinweis: wenn I entfernen den Pass-through Code, in der Hoffnung, dass es eine Art globalen Spielraum für Vars gibt, ist es nicht der Fall - die Variable geht nicht auf die Kindblattansicht p über künstlich. Ich hoffe, dass es in ZF2 einen besseren Ansatz für das gibt, was ich tun möchte.

Goal/Geist der Frage

Um klar zu sein, ich einen Weg suche einige Vars zu machen ein „global“ var zu sein, die sich von der Wurzel erstreckt partial/view auf das Blatt .phtml ohne Pass - Durch Code, oder vielleicht einen anderen Ansatz insgesamt, wo ich dies nicht tun muss, und dennoch nicht meinen Code mit Pass-Through Vars

+0

Über welche Art von Vorlagen/Variablen sprechen wir hier? Irgendein geschachteltes Baum-Rendering? Wie komplex sind die einzelnen Teiltöne? Der Grund warum ich frage ist, dass es, wie in ZF2 üblich, ungefähr 20 Möglichkeiten gibt, um ein Ziel zu erreichen. Welches der richtige ist oft sehr abhängig von der Situation :) – Fge

+0

Vielleicht den Platzhalter Helfer benutzen? – Progrock

+0

@Fge in meinem Fall Ich habe eine 'isAnOrder' boolesche Variable, die in einem if-then-else Konstrukt in meinem Blatt Kind Teil verwendet wird. Aber manchmal habe ich auch Arrays von Variablen, z. B. mehr boolesche Variablen, die gerade übergeben werden. – Dennis

Antwort

2

Instanzen können Sie verschachtelte ViewModel Instanzen zu replizieren die Funktionalität der Teilansicht Helfer . Wenn die Objekte unabhängig erstellt werden, müssen nicht alle Variablen an sie übergeben werden.

Ein einfaches Beispiel.

$main = new ViewModel(['var1' => 'xyz', 'var2' => 'xyz']); 
$main->setTemplate('main.phtml'); 

$foo = new ViewModel(['baz' => 'bob']); 
$foo->setTemplate('foo.phtml'); 

$bar = new ViewModel(['test' => 123]); 
$bar->setTemplate('bar.phtml'); 

// foo.phtml should echo $this->barResultHtml 
$foo->addChild($bar, 'barResultHtml'); 

// main.phtml should echo $this->fooResultHtml 
$main->addChild($foo, 'fooResultHtml'); 

// You will need to set this up to render the view model. 
$view = new Zend\View\View(); 
$view->setRenderer(...); 

echo $view->render($main); 
+0

danke. das scheint alle Variablenzuweisungen in einem einzigen Skript, aka 'example.php' zu" konsolidieren "und sie in einzelne entsprechende' ViewModel'-Kinder zu sortieren. Und dann macht 'render() 'den Rest. Ich stimme zu, ist ziemlich cool Ich probiere das aus. Ich melde mich zurück. – Dennis

+0

cool es scheint zu funktionieren ... reinigt immer noch den massiven Gordischen Knoten eines Codes – Dennis