Yii: выполнять действия с использованием разной компоновки, чем макет контроллера

В Yii существует ли способ сделать одно действие с использованием другого layout чем для контроллера? У меня есть действие, которое я хотел бы отформатировать по-другому от остальных, и это не ясно из документации, если это возможно.

Я верю в это действие, вы можете просто вызвать переменную $layout .

 public function actionYourAction() { $this->layout = 'nameOfYourAltLayout'; } 

Инструкции в приведенной ниже ссылке показывают, что вам нужно будет установить эту переменную для каждого действия, так как вы не можете просто установить общедоступную переменную по умолчанию и ожидать, что другие действия по умолчанию вернутся к этому.

http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/

::Редактировать::

Кажется, лучшей практикой здесь является определение переменной $layout в скрипте представления для конкретного действия, которое его вызывает. Например, если ваше действие вызывает viewscriptone.php то файл viewcriptone будет содержать:

 $this->layout = 'nameOfYourAltLayout'; 

Это имеет смысл переопределять здесь, а не в действии контроллера. Однако, как сказал LDG, если компоновка условна, вы, вероятно, должны держать ее в контроллере. Эта информация все еще может быть найдена в ссылке выше в разделе «Использование макетов» на странице.

В этой записи вики очень хорошая работа по описанию того, как использовать макеты, определенно стоит прочитать. Я действительно думаю, что вы можете установить макет по умолчанию в начале вашего класса контроллера, а затем переопределить это в рамках конкретной функции действия без необходимости определять макет в каждом действии, по крайней мере, это сработало для меня. Вы также можете использовать функцию beforeAction для любых сложных ситуаций. И, как вы уже знаете, вы можете использовать renderPartial для полного обхода макета.