我有一个搜索页面,将数据传递给渲染函数:
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)
如何在不必重新再次查询的情况下从控制器传递数据到这个范围?
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)