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

时间:2013-03-11 19:23:34

标签: php yii

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

public function actionIndex() {

  $this->render(
    'searchResults', 
    array(
      'dataProvider' => $dataProvider,
      'searchQuery'  => $searchQuery,
    )
  );
}

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

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

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

1 个答案:

答案 0 :(得分:3)

dataProvider 已包含

中包含的所有数据
$dataProvider->data
$dataProvider->getData()

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

class Controller extends CController
{
    public $data_exchange='';
    ...
}

在主要版面中$this->data_exchangebreadcrumbs相似的代码中操作很容易

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

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

$this->data_exchange = $dataProvider->data