,通过Slug而非ID获取远程节点数据非常有用。 Drupal JSONAPI不能做到这一点
答案 0 :(得分:0)
路线:
myapi.default_controller_nodebyslug:
path: '/jsonapi_tlged/node-by-slug/{slug}'
defaults:
_controller: '\Drupal\jsonapi_tlged\Controller\DefaultController::nodeBySlug'
_title: 'Node by slug'
requirements:
_permission: 'access content'
在控制器中:
public function nodeBySlug($slug) {
$database = \Drupal::database();
$query = $database->query(
"SELECT nid
FROM {node} n, {url_alias} a
WHERE n.nid = SUBSTR(a.source, 7)
AND a.alias = '/$slug'"
);
$result = $query->fetchObject();
if ($result !== false) {
$node = Node::load($result->nid);
return new JsonResponse($node->toArray());
}
//return new JsonResponse(json_encode(false));
return new JsonResponse(false);
}
答案 1 :(得分:0)
问题不是JSONAPI,它将仅获取您在查询中找到的对象的ID。然后,您必须将查询更改为仅搜索slug,而不是id和slug。
$query = $database->query(
"SELECT nid
FROM {node} n, {url_alias} a
WHERE a.alias = '/$slug'"
);