2013-05-14 53 views
1

是否可以在Zend Framework 2中将数组中的多个视图添加到父视图中? 例如:ZF2作为数组嵌套视图

childView.php

echo $this->data; 

parentView.php:

foreach($this->views as $view) 
    echo '<div>'.$view.'</div>'; 

Controller.php这样:

public function actionIndex(){ 
    $children = array(1,2,3); 
    foreach($children as $child){ 
     $childView = new ViewModel(array('data' => $child)); 
     $childView->setTemplate('childView'); 
     $childrenViews[] = $childView; 
    } 
    $view = new ViewModel(); 
    $view->setTemplate('parentView'); 

    // some function that adds the childrenViews to the parentView; 

    return $view; 
} 

预期输出:<div>1</div><div>2</div><div>3</div>

ps:这是虚拟代码,所以请忽略可能的语法错误。

+1

也许看看Akrabats'Zf2TestApp' - > http://zf2test.akrabat.com/,特别是多视图模型 - > http://zf2test.akrabat.com/view/multipleViewModels。您可以在github上找到源代码(它与测试应用程序链接) – Crisp 2013-05-14 10:26:38

回答

3

你可以做到以下几点:

public function actionIndex(){ 
    $children = array(1,2,3); 
    foreach($children as $child){ 
     $childView = new ViewModel(array('data' => $child)); 
     $childView->setTemplate('childView'); 
     $view->addChild($childView, 'the-child-views', true); 
    } 
    $view = new ViewModel(); 
    $view->setTemplate('parentView'); 

    return $view; 
} 

这条线:

$view->addChild($childView, 'the-child-views', true); 

将追加子视图到这一个变种。因此,您可以使用以下回应您的意见:

<?php echo $this->the-child-views ?> 

希望这是您正在寻找的。

3

可以的ViewModels的阵列刚刚分配到父视图模型。

<?php 
public function actionIndex() 
{ 
    $children = array(1,2,3); 
    foreach($children as $child){ 
     $childView = new ViewModel(array('data' => $child)); 
     $childView->setTemplate('childView'); 
     $childrenViews[] = $childView; 
    } 
    $view = new ViewModel(); 
    $view->setVariable('children', $children); // assign to $children 
    /** 
    * Or set in constructor 
    */ 
    //$view = new ViewModel(array(
    // 'children' => $children 
    //)); 

    $view->setTemplate('parentView'); 

    return $view; 
} 

现在你可以遍历他们在你父模板:

parentView.phtml

<?php // $children or $this->children to access your array of ViewModels ?> 
<?php foreach($children as $child): ?> 
    <?php echo $child // automatically rendered for you ?> 
<?php endforeach ?> 
+0

这对我不起作用,因为addChild需要一个接口作为第一个参数。而且一个数组不能统计这个。 – machete 2013-05-24 14:22:48

+0

更新,只是设置一个变量,而不是我的错误:) – Andrew 2013-05-24 14:32:36

+0

你的答案似乎比接受,因为你的例子,这是更容易理解,并给出正确的上下文 – Lulu 2016-02-03 17:42:39