在Yii2中将小部件输出捕获到字符串的最简单方法是什么?

时间:2018-02-12 10:21:40

标签: yii2 widget

我知道在简单小部件的情况下这很容易:$var = widget();

但是对于复杂的小部件,例如ActiveForm我不知道简单的方法。我必须使用几行代码:

ob_start();
widget::begin();
......
widget::end();
$var = ob_get_contents();
ob_end_clean();

也许有人知道更简单的方法吗?

2 个答案:

答案 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();
}

但是请不要忘记,将代码写入变量是行不通的,小部件的渲染从声明代码的地方开始