Php YII:从控制器向小部件传递数据?

Php YII:从控制器向小部件传递数据?,php,yii,Php,Yii,我有一个将数据传递给呈现函数的搜索页面: public function actionIndex() { $this->render( 'searchResults', array( 'dataProvider' => $dataProvider, 'searchQuery' => $searchQuery, ) ); } 问题是,我还需要将这些数据从这里传递到侧边栏中出现的小部件。小部件当前显示在layout/m

我有一个将数据传递给呈现函数的搜索页面:

public function actionIndex() {

  $this->render(
    'searchResults', 
    array(
      'dataProvider' => $dataProvider,
      'searchQuery'  => $searchQuery,
    )
  );
}
问题是,我还需要将这些数据从这里传递到侧边栏中出现的小部件。小部件当前显示在layout/main.php中,如下所示:

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


如何将数据从控制器传递到此widet,而不必再次执行查询?

数据提供程序已包含所有数据

$dataProvider->data
$dataProvider->getData()
要将其放置在主布局中,可以在控制器中创建另一个变量

class Controller extends CController
{
    public $data_exchange='';
    ...
}
使用
$this->data\u exchange
可以轻松操作代码中的任何地方,类似于主布局中的
breadcrumbs

$this->widget('searchSidebar', array(
    'id' => 'searchSidebar',
    'data' => $this->data_exchange 
    /* where $this refer to any class which extends Controller */
)); 
在视图代码中,将数据定义为:

$this->data_exchange = $dataProvider->data

也许你可以看看Yii事件。看起来这可能会让你达到你想去的地方: