我为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
。这让我觉得我做错了/应该有更好的方法将这些数据传递到小部件中。我怎样才能更好地将数据传递到我的小部件?