在我的SiteController.php 中
public function actionIndex()
{
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
//$this->render('index');
$dataProviderUser=new CActiveDataProvider('User',array(
'pagination'=>array(
'pageSize'=>20,
),
));
$dataProviderDomain = new CActiveDataProvider('Domain');
$this->render('index',array(
'dataProvider1'=>$dataProviderUser,
'dataProvider2'=>$dataProviderDomain
));
}
在我的主题/k/views/layout/main.php 中
<?php
if(!Yii::app()->user->isGuest)
{
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider2,
'itemView'=>'_view',));
?>
出现此错误:未定义的变量:dataProvider2
如果我在我的main.php中这样做:
<?php
$dataProvider2 = new CActiveDataProvider('Domain');
if(!Yii::app()->user->isGuest)
{
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider2,
'itemView'=>'_view',));
?>
到目前为止效果不错。但如果我去用户档案:
/user/view/id/5
未定义属性"Domain.username"
因此,在我的User_view.php中,Yii似乎采用了域数据提供者。
如何将这些数据提供程序传递到布局main.php文件SiteController.php似乎做得不对。
如果这里有人有主意,那就太好了。提前感谢。
您在控制器操作中定义的变量仅可用于渲染视图的即时视图文件。它们不适用于布局。但是,布局将能够使用控制器的公共方法和属性。因此,如果要将变量传递到布局,则需要将其声明为控制器的属性。有两种方法可以做到这一点。
首先,您可以创建一个公共变量。
Class YourController extends CController{
public $dataProvider2;
public function actionIndex(){
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
//$this->render('index');
$dataProviderUser=new CActiveDataProvider('User',array(
'pagination'=>array(
'pageSize'=>20,
),
));
$dataProviderDomain = new CActiveDataProvider('Domain');
//Added new line here
$this->dataProvider2 = $dataProviderDomain;
$this->render('index',array(
'dataProvider1'=>$dataProviderUser,
'dataProvider2'=>$dataProviderDomain
));
}
}
$this->dataProvider现在在您的视图文件中可用,但在使用它之前不要fooarget检查它是否存在。
另一种方法是使用Yii的魔术吸气剂方法。
在您的模型中,描述这样一种方法;
public function getdataProvider2(){
return $this->_dataProvider2;
}
你需要一处房产;
private $_dataProvider2;