한 번에, 문서를 파악하고 찾을 수있는 상당히 간단한 것이 상당히 혼란스럽고 찾기 어려워졌습니다. 이것은이 주제에 대한 상위 검색 결과 중 하나이므로 새로운 방법을 사용하여 통합 할 수있는 솔루션을 게시하는 데 시간을 투자하고 싶습니다.
내 유스 케이스는 특정 컨텐츠 유형의 공개 노드 목록을 가져 와서 타사가 소비 할 XML로 페이지에 공개하는 것입니다.
여기 내 선언이 있습니다. 이 시점에서 일부는 불필요 할 수 있지만 아직 코드를 업그레이드하지 않았습니다.
<?php
namespace Drupal\my_events_feed\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Component\Serialization;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Response;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Entity\EntityTypeManager;
객체를 XML에 공급하는 코드는 다음과 같습니다.
/**
* Class BuildXmlController.
*/
class BuildXmlController extends ControllerBase {
/**
* Builds the xml from an object
*/
public function build() {
$my_events = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'status' => '1',
'type' => 'submit_an_event',
]);
$thisSerializer = \Drupal::service('serializer');
$serializedData = $thisSerializer->serialize($my_events, 'xml', ['plugin_id' => 'entity']);
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
$response->setContent($serializedData);
return $response;
}
}
데이터를 마사지해야하는 경우 배열을 채우고 편집해야합니다. 물론 표준 라이브러리 배열을 직렬화 할 수 있습니다.
/**
* Class BuildXmlController.
*/
class BuildXmlController extends ControllerBase {
/**
* Builds the xml from an array
*/
public function build() {
$my_events = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'status' => '1',
'type' => 'submit_an_event',
]);
$nodedata = [];
if ($my_events) {
/*
Get the details of each node and
put it in an array.
We have to do this because we need to manipulate the array so that it will spit out exactly the XML we want
*/
foreach ($my_events as $node) {
$nodedata[] = $node->toArray();
}
}
foreach ($nodedata as &$nodedata_row) {
/* LOGIC TO MESS WITH THE ARRAY GOES HERE */
}
$thisSerializer = \Drupal::service('serializer');
$serializedData = $thisSerializer->serialize($nodedata, 'xml', ['plugin_id' => 'entity']);
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
$response->setContent($serializedData);
return $response;
}
}
이것이 도움이되기를 바랍니다.