我正在寻找一种将变量传递给部分视图的简洁方法。请考虑以下示例代码:
在我的控制器中,我做了:
$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');
因为这可能会让跟踪失败(即在控制器中设置与视图中相同的视图变量)。
是否有将变量传递给部分视图的干净解决方案?
答案 0 :(得分:1)
好吧,我认为在render()
方法中添加一个参数就足够了。也许像是......
$this->renderSubView($fileName, $data);
然后在renderSubView()
中,你可以做任何你需要做的数组并返回渲染的局部视图。这样您就不需要在视图中重新声明变量,只需在渲染时传递适合该特定部分的数据。