在 Yii2 的视图中更改布局文件

Change layout file within a view in Yii2

我正在使用 Yii2 做一个小项目。

假设我在视图(例如 site)中有相同的布局(页眉、页脚),除了此视图中的 login.php。我想要此文件中的不同页眉/页脚或没有页眉/页脚。我该怎么做才能仅从此视图文件中删除页眉/页脚。

我只能在不同的视图中更改布局。是否可以在视图的单个文件中更改布局?

里面的相对动作:

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

    return $this->render('yourView', [
        'model' =>$model,
    ]);
}

我来晚了一点,但是您可以在您的视图中更改您的布局。您不必在控制器中声明它。我个人认为还是在view里面做比较好,因为后面可以很方便的看到是怎么回事。如果您进行 HTML 编辑,您将进入视图文件,并且能够轻松地看到它使用的布局。将其放入控制器中,您(或以后的其他人)可能会错过嵌套在控制器操作中的布局更改。

由于 $this 在 Yii2 中指的是您的视图,而不是像在 Yii1 中那样指的是您的控制器,旧的 $this->layout 在您的视图中不再起作用。

现在,在 Yii2 中,您使用 $this->context 从视图中引用控制器。

$this->context->layout = 'your-layout';

在我的项目中,我想要 2 种布局:一种用于站点,一种用于 Web 应用程序。由于 main.php 文件是默认布局,我创建了一个 site.php 布局,并在 siteController 的开头,就在 class 声明之后,我将

public $layout = 'site';

结果是只有 siteController 呈现的视图使用 site.php 布局。它对我有用。

我参加聚会也有点晚了,但今天遇到了这些问题...... 对我来说,仅仅因为我想跳过页脚或页眉而创建一个单独的布局似乎是没有多大收获的代码。如果我能坚持主要布局,我就能得到控制器和动作 当前加载,并以这种方式省略它(在 main.php 中写入):

$contr   = Yii::$app->controller->id;
$action  = Yii::$app->controller->action->id;
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here   what U want

... 之后:

<?php if (!$skipFooter): ?> //Never at login...
    <footer class="footer">
        <div class="container">
            <p class="pull-left">&copy; YourSite.com <?= date('Y') ?></p>

            <p class="pull-right"><?= Yii::powered() ?></p>
        </div>
    </footer>
<?php endif; ?>