我正在努力学习Yii,并查看了Yii文档,但仍然没有真正得到它.我仍然不知道如何在Controller和View上使用CDataProvider来显示视图上可用的所有博客文章.任何人都可以根据以下建议或举例说明:
我的PostController中的actionIndex:
public function actionIndex() { $posts = Post::model()->findAll(); $this->render('index',array('posts' => $posts)); ));
View,Index.PHP:
<div> <?PHP foreach ($post as $post): ?> <h2><?PHP echo $post['title']; ?></h2> <?PHP echo CHtml::decode($post['content']); ?> <?PHP endforeach; ?> </div>
而不是做上述,有人可以建议如何使用CDataProvider来生成?
非常感谢.
我建议的最好的是在视图中使用
CListView,在控制器中使用
CActiveDataProvider.所以你的代码有点像这样:
控制器:
控制器:
public function actionIndex() { $dataProvider = new CActiveDataProvider('Post'); $this->render('index',array('dataProvider' => $dataProvider)); }
<?PHP $this->widget('zii.widgets.CListView',array( 'dataProvider'=>$dataProvider,'itemView'=>'_post',// refers to the partial view named '_post' // 'enablePagination'=>true ) ); ?>
_post.PHP:此文件将显示每个帖子,并在index.PHP视图中作为窗口小部件CListView的属性(即“itemView”=>“_ post”)传递.
<div class="post_title"> <?PHP // echo CHtml::encode($data->getAttributeLabel('title')); echo CHtml::encode($data->title); ?> </div> <br/><hr/> <div class="post_content"> <?PHP // echo CHtml::encode($data->getAttributeLabel('content')); echo CHtml::encode($data->content); ?> </div>
说明
基本上在控制器的索引操作中,我们创建了一个新的CActiveDataProvider,它提供了我们使用的Post模型的数据,我们将这个数据提供者传递给索引视图.在索引视图中,我们使用Zii小部件CListView,它使用dataProvider我们作为数据传递以生成列表.每个数据项将在我们作为属性传递给小部件的itemView文件中呈现为编码.此itemView文件可以在$data变量中访问Post模型的对象.
推荐阅读:使用Yii 1.1和PHP 5进行敏捷Web应用程序开发
Yii主页上列出了一本非常好的Yii初学者书.
编辑:没有CListView的问题
的index.PHP
<?PHP $dataArray = $dataProvider->getData(); foreach ($dataArray as $data){ echo CHtml::encode($data->title); echo CHtml::encode($data->content); } ?>