代码之家  ›  专栏  ›  技术社区  ›  Steve

如何在Symfony中为非HTML模板启用布局?

  •  1
  • Steve  · 技术社区  · 14 年前

    相对简单的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 回复  |  直到 14 年前
        1
  •  0
  •   Steve    14 年前

    显然,这并不是可以通过YAML在全球范围内设置的(这很悲哀)。

    您可以按照每个视图的文档中的说明进行设置,即在view.yml中:

    indexSuccess:
      layout: layout
      has_layout
    

    注意:设置 all 不起作用。

    $this->setLayout('layout')
    

    在一个操作中有效,但在我的场景中,这需要在 每一个 动作,又不是特别干。

    class myActions extends sfActions {
      public function execute($request) {
        if($request->getRequestFormat() == 'xml') {
          $this->setLayout('layout');
        }
        return parent::execute($request);
      }
    }
    

    如果确保所有操作都扩展,则全局排序问题 myActions 而不是 sfActions ,如果要对所有格式执行此操作,可以使用 preExecute sfWebRequest 为了确保我不会试图将布局强加于其他可能的格式,我可能会添加JSON。

        2
  •  0
  •   Tom    14 年前

    这可能是“为视图显式设置”的一部分吗?

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

    http://www.symfony-project.org/gentle-introduction/1_4/en/07-Inside-the-View-Layer