Yii dataProvider theme main.php


Yii dataProvider theme main.php

在我的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;