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

cod*_*ama 5 php yii

我有一个搜索页面,将数据传递给渲染函数:

public function actionIndex() {

  $this->render(
    'searchResults', 
    array(
      'dataProvider' => $dataProvider,
      'searchQuery'  => $searchQuery,
    )
  );
}
Run Code Online (Sandbox Code Playgroud)

问题是,我还需要将此数据从此处传递到侧边栏中显示的窗口小部件.窗口小部件当前显示在layout/main.php中,如下所示:

 <?php 
    $this->widget('searchSidebar', array(
      'id' => 'searchSidebar',
    )); 
 ?>
Run Code Online (Sandbox Code Playgroud)

如何在不必重新再次查询的情况下从控制器传递数据到这个范围?

nan*_*ult 3

dataProvider已经包含了所有数据

$dataProvider->data
$dataProvider->getData()
Run Code Online (Sandbox Code Playgroud)

要将其放置在主布局中,您可以在控制器中创建另一个变量

class Controller extends CController
{
    public $data_exchange='';
    ...
}
Run Code Online (Sandbox Code Playgroud)

与主布局中$this->data_exchange类似的操作将很容易在代码中的任何地方进行操作breadcrumbs

$this->widget('searchSidebar', array(
    'id' => 'searchSidebar',
    'data' => $this->data_exchange 
    /* where $this refer to any class which extends Controller */
)); 
Run Code Online (Sandbox Code Playgroud)

在您的视图代码中将您的数据定义为:

$this->data_exchange = $dataProvider->data
Run Code Online (Sandbox Code Playgroud)