Điểm:1

Tài nguyên REST tùy chỉnh ném 404

lá cờ np

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
Lambic avatar
lá cờ ph
Thoạt nhìn có vẻ như nó sẽ hoạt động. Một số câu hỏi rõ ràng: Mô-đun có được bật không? Bạn đã xóa bộ nhớ cache chưa? Có bất cứ điều gì thích hợp trong các bản ghi? Cấu hình điểm cuối đã bật trông như thế nào?
Stephan de Bruin avatar
lá cờ np
Mô-đun được bật, xóa bộ đệm, xóa nhật ký (nhiều lần). Tôi đã thêm cấu hình điểm cuối vào bài đăng gốc.
Lambic avatar
lá cờ ph
Hãy thử thay đổi "https://www.drupal.org/link-relations/create" thành "tạo". Hãy thử sử dụng dịch vụ request_stack để nhận yêu cầu thay vì chuyển nó dưới dạng tham số cho post().
Stephan de Bruin avatar
lá cờ np
Cảm ơn @Lambic, thay đổi "tạo" đã sửa nó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.