在 yii framework demos 中有一个 blog demo。在这个博客演示中,一个 Post 控制器有两个不同的操作:索引和视图。
/**
* Lists all models.
*/
public function actionIndex()
{
$criteria=new CDbCriteria(array(
'condition'=>'status='.Post::STATUS_PUBLISHED,
'order'=>'update_time DESC',
'with'=>'commentCount',
));
if(isset($_GET['tag']))
$criteria->addSearchCondition('tags',$_GET['tag']);
$dataProvider=new CActiveDataProvider('Post', array(
'pagination'=>array(
'pageSize'=>Yii::app()->params['postsPerPage'],
),
'criteria'=>$criteria,
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
/**
* Displays a particular model.
*/
public function actionView()
{
$post=$this->loadModel();
$comment=$this->newComment($post);
$this->render('view',array(
'model'=>$post,
'comment'=>$comment,
));
}
和索引视图是:
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'template'=>"{items}\n{pager}",
)); ?>
和视图是:
<?php $this->renderPartial('_view', array(
'data'=>$model,
)); ?>
但是索引和视图都使用_view:</p>
<div class="author">
posted by <?php echo $data->author->username . ' on ' . date('F j, Y',$data->create_time); ?>
</div>
<div class="content">
<?php
$this->beginWidget('CMarkdown', array('purifyOutput'=>true));
echo $data->content;
$this->endWidget();
?>
</div>
这是我的问题:我可以理解视图分配'data' => $model,所以在_view中,$data是有效的。在索引操作中,应用了小部件 clistview,但我不明白 $data 变量在哪里设置?我知道 $data 表示当前帖子(来自 dataprovider)。我只是不知道 yii 是如何以及在哪里做到这一点的?谢谢你的帮助。