Php 将变量传递到局部视图的干净方法

Php 将变量传递到局部视图的干净方法,php,model-view-controller,design-patterns,Php,Model View Controller,Design Patterns,我正在寻找一种将变量传递给局部视图的干净方法。考虑下面的示例代码: 在控制器中,我执行以下操作: $this->view->articles = $arrayWithArticles; $this->render('articles.phtml'); $this->view->products = $arrayWithProducts; $this->render('products.phtml'); 在我的articles.phtml视图中,我执行以下操

我正在寻找一种将变量传递给局部视图的干净方法。考虑下面的示例代码:

在控制器中,我执行以下操作:

$this->view->articles = $arrayWithArticles;
$this->render('articles.phtml');
$this->view->products = $arrayWithProducts;
$this->render('products.phtml');
在我的articles.phtml视图中,我执行以下操作:

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

    $this->render('comments.phtml');
}
foreach($this->products as $product) {
    // show product

    $this->render('comments.phtml');
}
在另一个控制器中,我执行以下操作:

$this->view->articles = $arrayWithArticles;
$this->render('articles.phtml');
$this->view->products = $arrayWithProducts;
$this->render('products.phtml');
在my products.phtml视图中,我执行以下操作:

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

    $this->render('comments.phtml');
}
foreach($this->products as $product) {
    // show product

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

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

$this->comments = $article->comments;
$this->render('comments.phtml');
因为这可能会成为跟踪的麻烦(即在控制器和视图中设置相同的视图变量)


是否有一个干净的解决方案可以将变量传递给局部视图?

嗯,我认为向
render()方法添加一个参数就足够了。也许像

$this->renderSubView($fileName, $data);
然后在
renderSubView()
中,可以对数组执行任何需要执行的操作,并返回渲染的局部视图。这样,您就不需要在视图中重新声明变量,只需在呈现特定部分时传递适合该部分的数据即可