Я создал пользовательский ресурс REST для создания конкретной записи узла. (Мне нужны дополнительные проверки, поэтому я не могу использовать доступный ресурс узла.) Конечная точка включена в пользовательском интерфейсе. Однако, когда я делаю 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;
/**
* Аннотация для почтового метода
*
* @RestResource(
* id = "тикетматик",
* label = @Translation("Ticketmatic"),
* сериализация_класс = "",
* uri_paths = {
* "canonical" = "/rest/ticketmatic",
* "https://www.drupal.org/link-relations/create" = "/rest/ticketmatic"
* }
* )
*/
класс Ticketmatic расширяет ResourceBase {
/**
* @param Запрос $запрос
*
* @return ResourceResponse
* @throws\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws\Drupal\Component\Plugin\Exception\PluginNotFoundException
* @throws\Drupal\Core\Entity\EntityStorageException
*/
сообщение публичной функции (запрос $ request) {
$response_status['статус'] = ложь;
$params = Json::decode($request->getContent());
$timezone = новый \DateTimeZone('UTC');
$ данные = [
'ид' => 2,
'тип' => 'концерт',
'название' => $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->set('заголовок', $params->заголовок);
$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)
->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT));
}
еще {
$node = Node::create($data);
}
если ($ узел-> сохранить ()) {
$response_status['статус'] = истина;
}
$response = новый ResourceResponse($response_status);
вернуть $ответ;
}
}
Я в недоумении, потому что аналогичный код работает в другом проекте; единственное отличие заключается в версии Drupal, используемой в этом проекте.
Любая помощь, совет или указатель приветствуются.
Это конфигурация конечной точки.
UUID: 8551c284-e6e5-4e28-9c39-6b4b4bc8a6d7
код языка: nl
статус: правда
зависимости:
модуль:
- базовая_аутентификация
- сериализация
- тикетматик
идентификатор: билетматик
plugin_id: билетматик
гранулярность: ресурс
конфигурация:
методы:
- ПУБЛИКОВАТЬ
форматы:
- json
аутентификация:
- базовая_аутентификация