Một cái gì đó, tại một thời điểm, khá đơn giản để tìm ra và tìm tài liệu cho đã trở nên khá khó hiểu và khó tìm hơn. Đây là một trong những kết quả tìm kiếm hàng đầu cho chủ đề này, vì vậy tôi muốn dành thời gian để đăng một giải pháp tôi có thể kết hợp bằng các Phương thức mới.
Trường hợp sử dụng của tôi là lấy danh sách các nút được xuất bản của một loại nội dung nhất định và xuất bản chúng lên một trang dưới dạng XML để được bên thứ ba sử dụng.
Đây là những tuyên bố của tôi. Một số trong số chúng có thể là thừa vào thời điểm này, nhưng tôi vẫn chưa hoàn thành việc nâng cấp mã.
<?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;
Đây là mã để chỉ cung cấp đối tượng vào 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;
}
}
Nếu bạn cần xoa bóp dữ liệu, thì bạn sẽ phải điền một mảng và chỉnh sửa ở đó. Tất nhiên, bạn vẫn có thể tuần tự hóa một mảng thư viện tiêu chuẩn.
/**
* 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;
}
}
Hi vọng điêu nay co ich.