如何避免从控制器发送变量到布局:yii

时间:2014-07-21 12:39:11

标签: php yii widget

我为Yii网络应用创建了一个新的布局。在Web应用程序中,我也调用了一个接收变量$ id的小部件。目前,我的小部件从控制器获取数据$ id,我在其中声明了一个公共变量,并在调用函数索引时更新它。

在控制器中

public $id; 
public function actionIndex($id)
{
    $dataProvider= new CActiveDataProvider('Recipient', array('criteria'=>array(
                                            'condition'=>'list_id = '.$id)));
    // resets the id so that $id can be captured inside the layout  
    $this->id = $id;

    $this->render('index',array(
        'dataProvider'=>$dataProvider,
        'id'=>$id,
    ));
}

在我的布局中,我像这样使用这个$ id。 Layout.php

<?php $this->beginContent('//layouts/main'); ?>

    <?php 
      $this->widget('ListSummaryWidget', array('id'=>$this->id)); 
    ?>

<?php $this->endContent();  ?>

最后在我的小部件中我使用了那个id。

class ListSummaryWidget extends CWidget
{
/**
 * @var CFormModel
 */


public $id;

/** 
*  
* This function renders the view. It passes in the $id and returns  
*  the total due, numper of people, available accounts and the 
*/  
public function run()
{
    $id = $this->id;
    $this->render('ListSummaryWidget', array(
        // returns the total amount that is due in a paylist 
        'totaldue'=> Recipient::model()->totaldue($id), 
        ));

}

现在这个有效。但是,我意识到如果我想再次使用那个小部件,我必须不断地在每个控制器的函数中调用$this->id = $id。这让我觉得我做错了/应该有更好的方法将这些数据传递到小部件中。我怎样才能更好地将数据传递到我的小部件?

0 个答案:

没有答案