ฉันได้สร้างทรัพยากร REST แบบกำหนดเองเพื่อสร้างรายการโหนดเฉพาะ (ฉันต้องการการตรวจสอบเพิ่มเติม ดังนั้นฉันจึงไม่สามารถใช้ทรัพยากรโหนดที่มีอยู่ได้) เปิดใช้งานจุดสิ้นสุดใน UI อย่างไรก็ตาม เมื่อฉันทำการเรียก POST ไปยังปลายทางที่ /rest/ticketmatic ระบบจะส่งคืน 404 โค้ดต่อไปนี้ในไฟล์ modules/custom/ticketmatic/src/Plugin/rest/resource/Ticketmatic.php
เนมสเปซ Drupal\ticketmatic\Plugin\rest\resource;
ใช้ Drupal\Component\Serialization\Json;
ใช้ Drupal\Core\Datetime\DrupalDateTime;
ใช้ Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
ใช้ Drupal\node\Entity\Node;
ใช้ Drupal\rest\Plugin\ResourceBase;
ใช้ Drupal\rest\ResourceResponse;
ใช้ Symfony\Component\HttpFoundation\Request;
/**
* คำอธิบายประกอบสำหรับวิธีการโพสต์
*
* @เรสท์รีซอร์ส(
* id = "บัตรโดยสาร",
* ป้ายกำกับ = @Translation("Ticketmatic"),
* serialization_class = "",
* uri_paths = {
* "canonical" = "/rest/ticketmatic",
* "https://www.drupal.org/link-relations/create" = "/rest/ticketmatic"
* }
* )
*/
class Ticketmatic ขยาย ResourceBase {
/**
* @param ขอ $request
*
* @return ResourceResponse
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
* @throws \Drupal\Core\Entity\EntityStorageException
*/
โพสต์ฟังก์ชั่นสาธารณะ (ขอ $ คำขอ) {
$response_status['status'] = เท็จ;
$params = Json::decode($request->getContent());
$เขตเวลา = ใหม่ \DateTimeZone('UTC');
$ข้อมูล = [
'uid' => 2,
'type' => 'คอนเสิร์ต',
'title' => $params['ชื่อเรื่อง'],
'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)
-> รูปแบบ (DateTimeItemInterface::DATETIME_STORAGE_FORMAT)
];
$existingNodes = \Drupal::entityTypeManager()->getStorage('โหนด')
->loadByProperties(['field_concert_tm_id' => $params->ID]);
ถ้า ($node = รีเซ็ต($existingNodes)) {
$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)
-> รูปแบบ (DateTimeItemInterface::DATETIME_STORAGE_FORMAT));
}
อื่น {
$node = โหนด::create($data);
}
ถ้า ($node->save()) {
$response_status['status'] = จริง;
}
$response = ใหม่ ResourceResponse($response_status);
ส่งคืน $response;
}
}
ฉันกำลังสูญเสียเพราะรหัสที่คล้ายกันทำงานในโครงการอื่น ข้อแตกต่างเพียงอย่างเดียวคือเวอร์ชัน Drupal ที่ใช้จากโครงการนั้น
ความช่วยเหลือ เคล็ดลับ หรือตัวชี้ใด ๆ ที่ชื่นชมอย่างมาก
นี่คือการกำหนดค่าปลายทาง
รหัส: 8551c284-e6e5-4e28-9c39-6b4b4bc8a6d7
รหัสภาษา: nl
สถานะ: จริง
การพึ่งพา:
โมดูล:
- พื้นฐาน_auth
- การทำให้เป็นอนุกรม
- ตั๋ว
id: Ticketmatic
plugin_id: ตั๋ว
ความละเอียด: ทรัพยากร
การกำหนดค่า:
วิธีการ:
- โพสต์
รูปแบบ:
- เจสัน
การรับรองความถูกต้อง:
- พื้นฐาน_auth