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

5
我有一个搜索页面,可以将数据传递给渲染函数:
public function actionIndex() {

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

问题是,我还需要将这些数据传递到侧边栏中显示的小部件中。目前在layout/main.php 中像这样显示小部件:

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

如果我不想重新查询,如何从控制器向这个小部件传递数据?


也许你可以看一下Yii的事件。看起来这可能会帮助你到达你想要去的地方:http://www.yiiframework.com/forum/index.php/topic/24316-using-yii-events/ - Joe Meyer
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接