Tôi đã tạo tài nguyên REST tùy chỉnh để tạo mục nhập nút cụ thể. (Tôi cần một số kiểm tra bổ sung, vì vậy tôi không thể sử dụng tài nguyên nút có sẵn.) Điểm cuối đã được bật trong giao diện người dùng. Tuy nhiên, khi tôi thực hiện lệnh gọi POST tới điểm cuối tại /rest/ticketmatic, nó trả về 404. Sau đây là mã trong tệp modules/custom/ticketmatic/src/Plugin/rest/resource/Ticketmatic.php.
không gian tên Drupal\ticketmatic\Plugin\rest\resource;
sử dụng Drupal\Thành phần\Serialization\Json;
sử dụng Drupal\Core\Datetime\DrupalDateTime;
sử dụng Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
sử dụng Drupal\node\Entity\Node;
sử dụng Drupal\rest\Plugin\ResourceBase;
sử dụng Drupal\rest\ResourceResponse;
sử dụng Symfony\Thành phần\HttpFoundation\Request;
/**
* Chú thích cho phương pháp đăng bài
*
* @RestResource(
* id = "vé",
* nhãn = @Translation("Vé"),
* serialization_class = "",
* uri_paths = {
* "canonical" = "/rest/ticketmatic",
* "https://www.drupal.org/link-relations/create" = "/rest/ticketmatic"
* }
* )
*/
lớp Ticketmatic mở rộng ResourceBase {
/**
* @param Yêu cầu $request
*
* @return Phản hồi tài nguyên
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
* @throws \Drupal\Core\Entity\EntityStorageException
*/
bài đăng chức năng công khai (Yêu cầu $request) {
$response_status['status'] = false;
$params = Json::decode($request->getContent());
$timezone = new \DateTimeZone('UTC');
$dữ liệu = [
'uid' => 2,
'loại' => 'buổi hòa nhạc',
'tiêu đề' => $params['tiêu đề'],
'field_concert_tm_id' => $params['ID'],
'field_concert_location' => $params['location'],
'field_concert_ticket_status' => $params['ticket_status'],
'field_concert_datetime' => DrupalDateTime::createFromTimestamp($params->datetime, $timezone)
-> định dạng(DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
];
$currentNodes = \Drupal::entityTypeManager()->getStorage('node')
->loadByProperties(['field_concert_tm_id' => $params->ID]);
if ($node = reset($currentNodes)) {
$node->set('title', $params->title);
$node->set('field_concert_location', $params->location);
$node->set('field_concert_ticket_status', $params->ticket_status);
$node->set('field_concert_datetime', DrupalDateTime::createFromTimestamp($params->datetime, $timezone)
-> định dạng(DateTimeItemInterface::DATETIME_STORAGE_FORMAT));
}
khác {
$node = Nút::tạo($data);
}
nếu ($node->save()) {
$response_status['status'] = true;
}
$response = new ResourceResponse($response_status);
trả lại phản hồi $;
}
}
Tôi không biết vì mã tương tự hoạt động trong một dự án khác; sự khác biệt duy nhất là phiên bản Drupal được sử dụng từ dự án đó.
Bất kỳ trợ giúp, mẹo hoặc con trỏ nào đều được đánh giá cao.
Đây là cấu hình điểm cuối.
uuid: 8551c284-e6e5-4e28-9c39-6b4b4bc8a6d7
mã ngôn ngữ: nl
trạng thái: đúng
phụ thuộc:
mô-đun:
- cơ bản_auth
- tuần tự hóa
- bán vé
id: bán vé
plugin_id: bán vé
độ chi tiết: tài nguyên
cấu hình:
phương pháp:
- BƯU KIỆN
định dạng:
- json
xác thực:
- cơ bản_auth