Изменение файла макета в представлении Yii2

Я делаю небольшой проект, используя 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'; 

В моем проекте я хотел 2 макеты: один для сайта и один для webapp. Поскольку файл main.php является макетом по умолчанию, я создал макет site.php и в начале siteController, сразу после объявления класса, я поставил

 public $layout = 'site'; 

Результатом является то, что только viewController, обработанный сайтом, использует макет 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; ?>