Skip to content

Commit 814a4f5

Browse files
pmelabfubhy
authored andcommitted
Adding route multiplexing. (#414)
1 parent 865a2b3 commit 814a4f5

File tree

4 files changed

+147
-103
lines changed

4 files changed

+147
-103
lines changed

modules/graphql_core/src/Plugin/GraphQL/Fields/Routing/RouteEntity.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* id = "route_entity",
2323
* secure = true,
2424
* name = "entity",
25-
* parents = {"Url"},
25+
* parents = {"EntityCanonicalUrl"},
2626
* type = "Entity"
2727
* )
2828
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Drupal\graphql_core\Plugin\GraphQL\Types\Entity;
4+
5+
use Drupal\Core\Url;
6+
use Drupal\graphql\Plugin\GraphQL\Types\TypePluginBase;
7+
8+
/**
9+
* GraphQL type for Drupal entity routes.
10+
*
11+
* @GraphQLType(
12+
* id = "entity_canonical_url",
13+
* name = "EntityCanonicalUrl",
14+
* interfaces = {"Url"},
15+
* weight = 1
16+
* )
17+
*/
18+
class EntityCanonicalUrl extends TypePluginBase {
19+
20+
/**
21+
* {@inheritdoc}
22+
*/
23+
public function applies($value) {
24+
if ($value instanceof Url && $value->isRouted()) {
25+
$parts = explode('.', $value->getRouteName());
26+
if (count($parts) !== 3) {
27+
return FALSE;
28+
}
29+
30+
list($prefix, $entityType, $suffix) = $parts;
31+
$parameters = $value->getRouteParameters();
32+
33+
if (($prefix === 'entity' && $suffix === 'canonical') && array_key_exists($entityType, $parameters)) {
34+
return TRUE;
35+
}
36+
}
37+
return FALSE;
38+
}
39+
40+
}

modules/graphql_core/tests/queries/image.gql

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
query ($path: String!) {
22
route:route(path: $path) {
3-
node:entity {
4-
image {
5-
alt
6-
title
7-
width
8-
height
9-
entity {
10-
url
11-
}
12-
thumbnailImage:derivative(style: thumbnail) {
3+
... on EntityCanonicalUrl {
4+
node:entity {
5+
image {
6+
alt
7+
title
138
width
149
height
15-
url
10+
entity {
11+
url
12+
}
13+
thumbnailImage:derivative(style: thumbnail) {
14+
width
15+
height
16+
url
17+
}
1618
}
1719
}
1820
}

modules/graphql_core/tests/queries/raw_field_values.gql

+93-91
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,106 @@
11
query ($path: String!) {
22
route:route(path: $path) {
3-
entity {
4-
... on NodeTest {
5-
nid
6-
vid
7-
langcode {
8-
value
9-
}
10-
type {
11-
targetId
12-
}
13-
uid {
14-
targetId
15-
entity {
16-
name
3+
... on EntityCanonicalUrl {
4+
entity {
5+
... on NodeTest {
6+
nid
7+
vid
8+
langcode {
9+
value
1710
}
18-
}
19-
title
20-
status
21-
promote
22-
sticky
23-
revisionTranslationAffected
24-
body {
25-
summaryProcessed
26-
summary
27-
processed
28-
format
29-
value
30-
}
31-
fieldText {
32-
value
33-
}
34-
fieldBoolean {
35-
value
36-
}
37-
fieldLink {
38-
title
39-
uri
40-
target:attribute(key: "_target")
41-
url {
42-
... on InternalUrl {
43-
internal:path
44-
}
45-
... on ExternalUrl {
46-
external:path
11+
type {
12+
targetId
13+
}
14+
uid {
15+
targetId
16+
entity {
17+
name
4718
}
4819
}
49-
50-
}
51-
fieldInteger {
52-
value
53-
}
54-
fieldFloat {
55-
value
56-
}
57-
fieldDecimal {
58-
value
59-
}
60-
fieldDatetime {
61-
value
62-
}
63-
fieldTimestamp {
64-
value
65-
}
66-
fieldEmail {
67-
value
68-
}
69-
fieldString {
70-
value
71-
}
72-
fieldReference {
73-
targetId
74-
entity {
20+
title
21+
status
22+
promote
23+
sticky
24+
revisionTranslationAffected
25+
body {
26+
summaryProcessed
27+
summary
28+
processed
29+
format
30+
value
31+
}
32+
fieldText {
33+
value
34+
}
35+
fieldBoolean {
36+
value
37+
}
38+
fieldLink {
7539
title
76-
fieldReference {
77-
targetId
78-
entity {
79-
title
40+
uri
41+
target:attribute(key: "_target")
42+
url {
43+
... on EntityCanonicalUrl {
44+
internal:path
45+
}
46+
... on ExternalUrl {
47+
external:path
8048
}
8149
}
50+
8251
}
83-
}
84-
fieldFile {
85-
targetId
86-
display
87-
description
88-
entity {
89-
url
90-
uri
52+
fieldInteger {
53+
value
9154
}
92-
}
93-
fieldImage {
94-
targetId
95-
alt
96-
title
97-
width
98-
height
99-
entity {
100-
url
101-
uri
55+
fieldFloat {
56+
value
57+
}
58+
fieldDecimal {
59+
value
60+
}
61+
fieldDatetime {
62+
value
63+
}
64+
fieldTimestamp {
65+
value
66+
}
67+
fieldEmail {
68+
value
69+
}
70+
fieldString {
71+
value
72+
}
73+
fieldReference {
74+
targetId
75+
entity {
76+
title
77+
fieldReference {
78+
targetId
79+
entity {
80+
title
81+
}
82+
}
83+
}
84+
}
85+
fieldFile {
86+
targetId
87+
display
88+
description
89+
entity {
90+
url
91+
uri
92+
}
93+
}
94+
fieldImage {
95+
targetId
96+
alt
97+
title
98+
width
99+
height
100+
entity {
101+
url
102+
uri
103+
}
102104
}
103105
}
104106
}

0 commit comments

Comments
 (0)