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