Как вы включили макеты для не-HTML шаблонов в Symfony? - PullRequest
1 голос
/ 31 октября 2010

Мой пример

Относительно простой layout.xml.php:

<?xml version="1.0" encoding="<?php echo sfConfig::get('sf_charset', 'UTF-8') ?>"?>
<example>
  <?php echo $sf_content ?>
</example>

Просто не используется никакими шаблонами XML, например indexSuccess.xml.php


Документация Symfony гласит:

Макет автоматически отключается для XML-запросов HTTP и типов содержимого, отличных от HTML, если это явно не указано для представления.

И все же не дает документации о том, как правильно установить? В других местах очевидно приводит к:

all:
  layout: layout
  has_layout: true

Но, похоже, это не имеет значения для шаблонов XML?

В других источниках упоминается, что у sfAction есть метод hasLayout, который явно устарел.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2010

Может ли это быть частью "установки его явно для представления"?

$response = $this->getResponse();
$response->setContentType('text/xml');

http://www.symfony -project.org / gentle-вводный / 1_4 / ru / 07-Inside-the-Просмотр-Layer

0 голосов
/ 31 октября 2010

Очевидно, что это не то, что можно установить глобально через 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...