在Yii2.0版本中,如何从控制器里面传递变量到布局文件layouts里的模板中

jerry Yii2 2015年11月15日 收藏

在Yii2.0中,view模板文件里面的$this已经不是对应的控制器对象了,而是View对象的变量。我们可以通过View对象中的params变量来传递数据。

先获取当前View,然后给view设置参数,

    class SiteController extends Controller
    {
            
            public function actionIndex()
            {
                    //设置当前view的params参数,
                    $view = Yii::$app->view;
                    $view->params['layoutData']='test';
                   
                    return $this->render('index');
            }
    }

在layouts/main.php

<?php
    use yii\helpers\Html;
    use yii\bootstrap\Nav;
    use yii\bootstrap\NavBar;
    use yii\widgets\Breadcrumbs;
    use frontend\assets\AppAsset;
    use frontend\widgets\Alert;
    /**
    * @var \yii\web\View $this
    * @var string $content
    */
    AppAsset::register($this);
    ?>
    <?php $this->beginPage() ?>
    <!DOCTYPE html>
    <html lang="<?= Yii::$app->language ?>">
    <head>
            <meta charset="<?= Yii::$app->charset ?>"/>
            <title><?= Html::encode($this->title) ?></title>
            <?php $this->head() ?>
    </head>
    <body>
            <?php $this->beginBody() ?>
            
            <?php echo $this->params['layoutData']?>
    ..............

view里面的$this由控制器对象变为View对象是其中的一个大改变,这样整个框架也更清晰了。