Puncte:1

Resursa REST personalizată aruncă 404

drapel np

Am creat o resursă REST personalizată pentru a crea o anumită intrare de nod. (Am nevoie de niște verificări suplimentare, așa că nu pot folosi resursa de nod disponibilă.) Punctul final a fost activat în UI. Cu toate acestea, când fac un apel POST către punctul final la /rest/ticketmatic, returnează un 404. Următorul este codul din fișierul modules/custom/ticketmatic/src/Plugin/rest/resource/Ticketmatic.php.

spațiu de nume Drupal\ticketmatic\Plugin\rest\resource;

utilizați Drupal\Component\Serialization\Json;
utilizați Drupal\Core\Datetime\DrupalDateTime;
utilizați Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
utilizați Drupal\node\Entity\Node;
utilizați Drupal\rest\Plugin\ResourceBase;
utilizați Drupal\rest\ResourceResponse;
utilizați Symfony\Component\HttpFoundation\Request;

/**
 * Adnotare pentru metoda postării
 *
 * @RestResource(
 * id = "ticketmatic",
 * label = @Translation ("Ticketmatic"),
 * serialization_class = "",
 * uri_paths = {
 * "canonic" = "/repaus/ticketmatic",
 * "https://www.drupal.org/link-relations/create" = "/rest/ticketmatic"
 *}
 * )
 */
clasa Ticketmatic extinde ResourceBase {

  /**
   * @param Solicitare $request
   *
   * @return ResourceResponse
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  post de funcție publică (Solicitare $cerere) {
    $response_status['status'] = fals;
    $params = Json::decode($request->getContent());
    $timezone = new \DateTimeZone('UTC');
    $date = [
      'uid' => 2,
      'type' => 'concert',
      'title' => $params['title'],
      '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)
        ->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    ];

    $existingNodes = \Drupal::entityTypeManager()->getStorage('nod')
      ->loadByProperties(['field_concert_tm_id' => $params->ID]);

    if ($nod = reset($existingNodes)) {
      $nod->set('titlu', $params->titlu);
      $nod->set('field_concert_location', $params->location);
      $nod->set('field_concert_ticket_status', $params->ticket_status);
      $node->set('field_concert_datetime', DrupalDateTime::createFromTimestamp($params->datetime, $timezone)
        ->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT));
    }
    else {
      $nod = Nod::create($date);
    }

    if ($nod->salvare()) {
      $response_status['status'] = adevărat;
    }

    $răspuns = nou ResourceResponse($response_status);

    returnează $răspuns;
  }

}

Sunt în pierdere, pentru că un cod similar funcționează într-un proiect diferit; singura diferență este versiunea Drupal folosită din acel proiect.

Orice ajutor, sfat sau indicație sunt foarte apreciate.

Aceasta este configurația punctului final.

uuid: 8551c284-e6e5-4e28-9c39-6b4b4bc8a6d7
cod limba: nl
stare: adevărat
dependențe:
  modul:
    - basic_auth
    - serializare
    - ticketmatic
id: ticketmatic
plugin_id: ticketmatic
granularitate: resursă
configuratie:
  metode:
    - POST
  formate:
    - json
  autentificare:
    - basic_auth
Lambic avatar
drapel ph
La prima vedere pare că ar trebui să funcționeze. Câteva întrebări evidente: Modulul este activat? Ai golit memoria cache? Există ceva relevant în jurnalele? Cum arată configurația de endpoint activată?
Stephan de Bruin avatar
drapel np
Modulul este activat, memoria cache este ștearsă, jurnalele sunt șterse (de mai multe ori). Am adăugat configurația punctului final la postarea inițială.
Lambic avatar
drapel ph
Încercați să schimbați „https://www.drupal.org/link-relations/create” cu doar „creați”. Încercați să utilizați serviciul request_stack pentru a obține cererea în loc să o transmiteți ca parametru la post().
Stephan de Bruin avatar
drapel np
Mulțumesc @Lambic, schimbarea „creează” a fost cea care a rezolvat-o.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.