web-dev-qa-db-ja.com

XMLフィードを返すルートを作成する

XMLフィードを返すページを作成するにはどうすればよいですか?

1
BOES

詳細を教えてください。

たとえば、アグリゲーターRSSの場合:

Test.routing.ymlで:

test.rss:
  path: '/rss'
  defaults:
    _title: 'rss'
    _controller: '\Drupal\test\Controller\RssController::content'
  requirements:
    _access_test: 'test'

そしてあなたのコントローラーで:

<?php

namespace Drupal\test\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;

class RssController extends ControllerBase
{
    public function content()
    {
        $response = new Response();
        $response->setContent('<?xml> My flux </xml>');
       // kint($response);
        return $response;

    }

}

HttpFoundation\Responseコンポーネントが必要です。

6
Kevin

ケビンの答えは私のTwigテンプレートの<?xml ...>タグをコメント化します。ページをXMLとしてレンダリングするように追加する必要がありました。

$response->headers->set('Content-Type', 'text/xml');

customという名前の私のモジュールの完全な例。

custom.routing

# My XML controller
custom.my_xml_feed:
  path: '/xml-feed'
  defaults:
    _controller: '\Drupal\custom\Controller\XMLfeed::content'
  requirements:
    _permission: 'access content'

XMLfeed.php

<?php

namespace Drupal\custom\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;

class XMLfeed extends ControllerBase {


  public function content() {
    $rows = [];

    $build = [
      '#theme' => 'my_theme_template',
      '#rows' => $rows,
      '#cache' => ['max-age' => 0],
    ];

    $output = \Drupal::service('renderer')->renderRoot($build);

    $response = new Response();
    $response->setContent($output);
    $response->headers->set('Content-Type', 'text/xml');

    return $response;
 }

}
2
Chris Happy