我知道在简单小部件的情况下这很容易:$var = widget();
但是对于复杂的小部件,例如ActiveForm我不知道简单的方法。我必须使用几行代码:
ob_start();
widget::begin();
......
widget::end();
$var = ob_get_contents();
ob_end_clean();
也许有人知道更简单的方法吗?
答案 0 :(得分:0)
您可以在部分内容中包含小部件。
$widgetContents = $this->renderPartial('_fancy-widget', [
'dataProvider' => $dataProvider,
'otherParam' => $otherParams
]);
以及您可以放入_fancy-widget.php
答案 1 :(得分:0)
最简单的方法是:
public function ###(){
...
$layout = self::renderWidgetBegin();
$layout .= ...;
$layout .= self::renderWidgetEnd();
...
}
private function renderWidgetBegin()
{
Widget::begin([]);
}
private function renderWidgetEnd()
{
Widget::end();
}
但是请不要忘记,将代码写入变量是行不通的,小部件的渲染从声明代码的地方开始