XMLフィードを返すページを作成するにはどうすればよいですか?
詳細を教えてください。
たとえば、アグリゲーター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コンポーネントが必要です。
ケビンの答えは私の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;
}
}