2016-04-11 10 views
1

私は完全なZF2スタックを持っていませんが、私は$this->partial()ViewModel()の方法を受け入れるために私のほとんど非ZF2コードを組み立てました。パススルーコードを使用せずに、ZF2の遠隔ビューの子にビューヘルパー変数を伝播するにはどうすればよいですか?

私は、View Helper Partialsのツリーを持っていて、何人かの遠く離れた子が変数someVarを必要とする状況がよくあります。

私はその変数を管理して、ルート内の部分的な部分には必要ない場合でも、partialをルートから子にそれぞれ渡します。

varを管理する必要はありませんか?

//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; 
?> 

私はなど、すなわちViewModelpartial構文を使用して答えを開いています

注:私はパススルーを削除コードでは、変数のグローバルスコープがあることを期待していますが、そうではありません。変数は子リーフビューpに渡されません芸術的。 ZF2には、私がしたいことのためのより良いアプローチがあることが期待されています。質問の

ゴール/スピリット

は、私はいくつかのVARSがパスなしで、葉.phtmlpartial/viewのルートから自分自身を拡張し、「グローバル」VARことができるようにする方法を求めている明確にします私はこれを行う必要はありませんが、パススルーvarsでコードを乱雑にしないでください。

+0

ここではどのようなテンプレート/変数について説明していますか?いくつかのネストされたツリーレンダリング?個々のパーシャルはどのくらい複雑ですか?私が求めているのは、ZF2でいつものように、目標を達成するための方法は20種類あります。正しい方法は状況に大きく左右されます。 – Fge

+0

おそらくプレースホルダヘルパーを使用しますか? – Progrock

+0

私の場合、@Fge私の葉の子部分にif-then-else構文で使用される 'isAnOrder'ブール変数があります。しかし、私は時には、渡されたばかりのブール変数など、変数の配列もあります。 – Dennis

答えて

2

ネストされたViewModelインスタンスを使用して、部分ビューヘルパーの機能を複製することができます。独立してオブジェクトを作成することで、各オブジェクトにすべての変数を渡す必要はありません。

単純な例です。

$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

ありがとう。すべての変数の代入を単一のスクリプト(別名 'example.php')に '統合'し、個々のそれぞれの' ViewModel'子にそれらを並べ替えるように見えるので、 'render()'は残りを行います。私はこれを試してみる私は戻って報告する.. – Dennis

+0

クールなことが働いているようだ...まだコードの大規模なゴードンの結び目をきれいに – Dennis

関連する問題