Очевидно, что это не то, что можно установить глобально через YAML (что печально).
Вы можете установить его, как указано в документации для каждого представления, т.е. в view.yml:
indexSuccess:
layout: layout
has_layout
Но это довольно трудоемко, если у вас много действий против концепций СУХОЙ.
Примечание. Установка значений для all
не имеет никакого эффекта.
$this->setLayout('layout')
Работает в действии, но, опять же, в моем сценарии это должно быть установлено в каждом действии, опять же не особенно DRY.
Таким образом, я решил расширить sfActions и связать его с методом preExecute.
class myActions extends sfActions {
public function execute($request) {
if($request->getRequestFormat() == 'xml') {
$this->setLayout('layout');
}
return parent::execute($request);
}
}
Сортирует проблему глобально, если вы убедитесь, что все ваши действия расширяются myActions
вместо sfActions
, если вы хотите сделать это для всех форматов, вы можете использовать вместо этого метод preExecute
, но я хотел использование sfWebRequest
, чтобы убедиться, что я не пытаюсь навязывать макеты другим предполагаемым форматам, таким как JSON.