18
18
use ApiPlatform \Metadata \ApiResource ;
19
19
use ApiPlatform \Metadata \Get ;
20
20
use ApiPlatform \Metadata \GetCollection ;
21
+ use ApiPlatform \Metadata \Link ;
21
22
use PhpParser \Node ;
22
23
use PhpParser \NodeVisitorAbstract ;
23
24
use ReflectionClass ;
@@ -89,6 +90,13 @@ public function enterNode(Node $node)
89
90
ApiResource::class
90
91
)
91
92
),
93
+ ]),
94
+ new Node \Stmt \Use_ ([
95
+ new Node \Stmt \UseUse (
96
+ new Node \Name (
97
+ Link::class
98
+ )
99
+ ),
92
100
])
93
101
);
94
102
}
@@ -99,62 +107,44 @@ public function enterNode(Node $node)
99
107
100
108
foreach ($ this ->subresourceMetadata ['uri_variables ' ] as $ identifier => $ resource ) {
101
109
$ identifierNodes = [
102
- new Node \Expr \ArrayItem (
103
- new Node \Expr \ClassConstFetch (
110
+ 'fromClass ' => new Node \Expr \ClassConstFetch (
104
111
new Node \Name (
105
112
($ resource ['from_class ' ] === $ this ->subresourceMetadata ['resource_class ' ]) ? 'self ' : '\\' .$ resource ['from_class ' ]
106
113
),
107
114
'class '
108
115
),
109
- new Node \Scalar \String_ ('from_class ' )
110
- ),
111
- new Node \Expr \ArrayItem (
112
- new Node \Expr \Array_ (
116
+ 'identifiers ' => new Node \Expr \Array_ (
113
117
isset ($ resource ['identifiers ' ][0 ]) ? [
114
118
new Node \Expr \ArrayItem (new Node \Scalar \String_ ($ resource ['identifiers ' ][0 ])),
115
119
] : [],
116
- ['kind ' => Node \Expr \Array_::KIND_SHORT ]),
117
- new Node \Scalar \String_ ('identifiers ' )
118
- ),
120
+ ['kind ' => Node \Expr \Array_::KIND_SHORT ]
121
+ ),
119
122
];
120
123
121
124
if (isset ($ resource ['expanded_value ' ])) {
122
- $ identifierNodes [] = new Node \Expr \ArrayItem (
123
- new Node \Scalar \String_ ('expanded_value ' ),
124
- new Node \Scalar \String_ ($ resource ['expanded_value ' ])
125
- );
125
+ $ identifierNodes ['expandedValue ' ] = new Node \Scalar \String_ ($ resource ['expanded_value ' ]);
126
126
}
127
127
128
128
if (isset ($ resource ['from_property ' ]) || isset ($ resource ['to_property ' ])) {
129
- $ identifierNodes [] = new Node \Expr \ArrayItem (
130
- new Node \Scalar \String_ ($ resource ['to_property ' ] ?? $ resource ['from_property ' ]),
131
- new Node \Scalar \String_ (isset ($ resource ['to_property ' ]) ? 'to_property ' : 'from_property ' )
132
- );
129
+ $ identifierNodes [isset ($ resource ['to_property ' ]) ? 'toProperty ' : 'fromProperty ' ] = new Node \Scalar \String_ ($ resource ['to_property ' ] ?? $ resource ['from_property ' ]);
133
130
}
134
131
135
- $ identifiersNodeItems [] = new Node \Expr \ArrayItem (
136
- new Node \Expr \Array_ (
137
- $ identifierNodes ,
138
- [
139
- 'kind ' => Node \Expr \Array_::KIND_SHORT ,
140
- ]
141
- ),
132
+ $ identifierNodeItems [] = new Node \Expr \ArrayItem (
133
+ new Node \Expr \New_ (new Node \Name ('Link ' ), $ this ->arrayToArguments ($ identifierNodes )),
142
134
new Node \Scalar \String_ ($ identifier )
143
135
);
144
136
}
145
137
146
- $ identifiersNode = new Node \Expr \Array_ ($ identifiersNodeItems , ['kind ' => Node \Expr \Array_::KIND_SHORT ]);
147
-
148
138
$ arguments = [
149
139
new Node \Arg (
150
- new Node \Scalar \String_ (str_replace ( ' .{_format} ' , '' , $ this ->subresourceMetadata ['path ' ]) ),
140
+ new Node \Scalar \String_ ($ this ->subresourceMetadata ['path ' ]),
151
141
false ,
152
142
false ,
153
143
[],
154
144
new Node \Identifier ('uriTemplate ' )
155
145
),
156
146
new Node \Arg (
157
- $ identifiersNode ,
147
+ new Node \ Expr \ Array_ ( $ identifierNodeItems , [ ' kind ' => Node \ Expr \Array_:: KIND_SHORT ]) ,
158
148
false ,
159
149
false ,
160
150
[],
@@ -280,4 +270,17 @@ public function enterNode(Node $node)
280
270
$ node ->attrGroups [] = $ apiResourceAttribute ;
281
271
}
282
272
}
273
+
274
+ /**
275
+ * @return Node\Arg[]
276
+ */
277
+ private function arrayToArguments (array $ arguments )
278
+ {
279
+ $ args = [];
280
+ foreach ($ arguments as $ key => $ value ) {
281
+ $ args [] = new Node \Arg ($ value , false , false , [], new Node \Identifier ($ key ));
282
+ }
283
+
284
+ return $ args ;
285
+ }
283
286
}
0 commit comments