2016-04-11 24 views
1

Ben tam ZF2 yığını yok ama ben $this->partial() ve ViewModel() yöntemlerini kabul etmek benim çoğunlukla-olmayan ZF2 kodu hileli.Görüntüleme Yardımcısı değişkenini, geçiş kodu kullanmadan ZF2'deki uzak bir Çocuğa nasıl dağıtabilirim?

Kökten uzaktaki bir çocuğun someVar değişkenine gereksinim duyduğu Görünüm Ağacı Yardımcıları ağacımın bulunduğu bir durumla karşılaşıyorum.

Ben-rota Partials bunun için ihtiyacımız yok bile çocuğa kökünden her partial geçirilerek bu değişkeni yönetmek.

Var yönetmek zorunda değil bir yolu var mı?

Örnek

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

I olmayan partial yapı, yani ViewModel kullanımı cevap açığım vb

Not: I geçişini kaldırırken kod, vars için bir çeşit küresel kapsam olduğunu umuyoruz, durum böyle değil - değişken çocuk yaprak görünümüne geçmiyor p artial. ZF2'de yapmak istediklerim için bir çeşit daha iyi bir yaklaşım olduğunu umuyorum. Soru

Hedef/Ruh

Bazı değişkenler geçiş olmadan yaprak .phtml-partial/view kökünden kendisini genişleten bir "küresel" var olmak için bir yol arıyorum Açık olmak gerekirse -değişik kod, ya da belki de bunu yapmak için gerek yok nerede, ve hala benim kod dağınıklık var

+0

biz burada yaklaşık şablonlar/değişkenin ne tür bahsediyoruz? Bazı iç içe ağaç-render? Bireysel kısmi ne kadar karmaşık? Sormamın sebebi, ZF2'de olduğu gibi, bir hedefe ulaşmak için 20 yolun var, hangisinin doğru olacağına genellikle çok bağlı olduğu :) :) – Fge

+0

Belki de yer tutucu yardımcısını kullanın? benim durumumda – Progrock

+0

@Fge ben if-then-else kısmi benim yaprak çocukta inşa bir in kullanılan bir 'isAnOrder' boole değişkeni var. Ama bazen de, içinden geçmiş olan daha boole değişkenleri gibi değişkenler dizisine de sahibim. – Dennis

cevap

2

Kısmi görünüm yardımcı işlevselliğini çoğaltmak için iç içe ViewModel örnekleri kullanabilirsiniz . Nesneleri bağımsız olarak oluşturarak, tüm değişkenleri her birine iletmeye gerek yoktur.

Basit bir örnek.

$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

teşekkürler. Bu, tüm değişken atamasını tek bir betiğe, yani "example.php" ye birleştirip, ilgili "ViewModel" çocuklarına ayırır ve sonra render() 'geri kalanını yapar. Bunu bir daha deneyeceğim .. – Dennis

+0

cool çalışıyor gibi görünüyor ... hala bir kodun büyük Gordian Düğümünü temizleme – Dennis