5

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

public function actionIndex() {

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

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

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

我将如何将数据从控制器传递到这个widet,而不必再次重做查询?

4

1 回答 1

3

dataProvider已经包含了所有数据

$dataProvider->data
$dataProvider->getData()

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

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

与您的主布局$this->data_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
于 2013-03-12T00:47:21.883 回答