Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

:: Edit::

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

$this->layout = 'nameOfYourAltLayout';

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

Ответ 2

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