将变量传递给局部视图的干净方式

时间:2012-01-17 23:12:04

标签: php model-view-controller design-patterns

我正在寻找一种将变量传递给部分视图的简洁方法。请考虑以下示例代码:

在我的控制器中,我做了:

$this->view->articles = $arrayWithArticles;
$this->render('articles.phtml');

在我的 articles.phtml 视图中,我这样做:

foreach($this->articles as $article) {
    // show article

    $this->render('comments.phtml');
}

在我做的另一个控制器中:

$this->view->products = $arrayWithProducts;
$this->render('products.phtml');

在我的 products.phtml 视图中,我这样做:

foreach($this->products as $product) {
    // show product

    $this->render('comments.phtml');
}

如您所见,我使用相同(部分)视图 comments.phtml 来显示有关书面文章和产品的评论。我要显示的“评论”位于$article->comments$product->reviews。部分视图将需要这些来显示它们。

将它们传递给局部视图的干净方法是什么。我真的不想这样做:

$this->comments = $article->comments;
$this->render('comments.phtml');

因为这可能会让跟踪失败(即在控制器中设置与视图中相同的视图变量)。

是否有将变量传递给部分视图的干净解决方案?

1 个答案:

答案 0 :(得分:1)

好吧,我认为在render()方法中添加一个参数就足够了。也许像是......

$this->renderSubView($fileName, $data);

然后在renderSubView()中,你可以做任何你需要做的数组并返回渲染的局部视图。这样您就不需要在视图中重新声明变量,只需在渲染时传递适合该特定部分的数据。