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