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

Php 在Yii2中更改视图内的布局文件,php,model-view-controller,yii2,Php,Model View Controller,Yii2,我正在用Yii2做一个小项目 假设我在一个视图(例如site)中有相同的布局(页眉、页脚),除了这个视图中的login.php。我希望此文件中有不同的页眉/页脚或没有页眉/页脚。我可以做什么?仅从此视图文件中删除页眉/页脚 我所能做的就是在不同的视图中改变布局。是否可以更改视图单个文件中的布局?在相关操作中: public function actionYourAction($id) { $this->layout = 'yourNewLayout'; return $

我正在用Yii2做一个小项目

假设我在一个视图(例如
site
)中有相同的布局(页眉、页脚),除了这个视图中的
login.php
。我希望此文件中有不同的页眉/页脚或没有页眉/页脚。我可以做什么?仅从此视图文件中删除页眉/页脚


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

在相关操作中:

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

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

我来晚了一点,但是你可以在你的视野内改变你的布局。您不必在控制器中声明它。我个人认为最好是在视图中进行,因为您可以很容易地在以后看到正在发生的事情。如果您进行HTML编辑,您将进入视图文件,很容易看到它使用的布局。将其放入控制器中,您(或稍后的人)可能会错过嵌套在控制器操作中的布局更改

由于
$this
引用的是Yii2中的视图,而不是Yii1中的控制器,因此旧的
$this->layout
在视图中不再起作用

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

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

在我的项目中,我想要两个布局:一个用于站点,一个用于webapp。由于main.php文件是默认布局,我创建了一个site.php布局,在siteController的开头,在类声明之后,我将

public $layout = 'site';

结果是,只有siteController呈现的视图使用site.php布局。这对我来说很有效。

我参加聚会也晚了一点,但今天我在为这件事挣扎。。。 对我来说,仅仅因为我想跳过页脚或页眉就创建一个单独的布局,这似乎是一个小小的胜利。如果我能坚持主布局,我就可以直接进入控制器和动作 当前已加载,并以这种方式将其忽略(在main.php中编写):

。。。后来:

<?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; ?>
//登录时从不。。。

©;YourSite.com

Great and instant solution:)你的摇滚乐@scaisEdge bro。你必须参考
<?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; ?>