@@ -27,14 +27,19 @@ public function createArgumentMetadata($controller): array
27
27
28
28
if (\is_array ($ controller )) {
29
29
$ reflection = new \ReflectionMethod ($ controller [0 ], $ controller [1 ]);
30
+ $ class = $ reflection ->class ;
30
31
} elseif (\is_object ($ controller ) && !$ controller instanceof \Closure) {
31
- $ reflection = (new \ReflectionObject ($ controller ))->getMethod ('__invoke ' );
32
+ $ reflection = new \ReflectionMethod ($ controller , '__invoke ' );
33
+ $ class = $ reflection ->class ;
32
34
} else {
33
35
$ reflection = new \ReflectionFunction ($ controller );
36
+ if ($ class = str_contains ($ reflection ->name , '{closure} ' ) ? null : $ reflection ->getClosureScopeClass ()) {
37
+ $ class = $ class ->name ;
38
+ }
34
39
}
35
40
36
41
foreach ($ reflection ->getParameters () as $ param ) {
37
- $ arguments [] = new ArgumentMetadata ($ param ->getName (), $ this ->getType ($ param , $ reflection ), $ param ->isVariadic (), $ param ->isDefaultValueAvailable (), $ param ->isDefaultValueAvailable () ? $ param ->getDefaultValue () : null , $ param ->allowsNull ());
42
+ $ arguments [] = new ArgumentMetadata ($ param ->getName (), $ this ->getType ($ param , $ reflection, $ class ), $ param ->isVariadic (), $ param ->isDefaultValueAvailable (), $ param ->isDefaultValueAvailable () ? $ param ->getDefaultValue () : null , $ param ->allowsNull ());
38
43
}
39
44
40
45
return $ arguments ;
@@ -43,20 +48,19 @@ public function createArgumentMetadata($controller): array
43
48
/**
44
49
* Returns an associated type to the given parameter if available.
45
50
*/
46
- private function getType (\ReflectionParameter $ parameter , \ReflectionFunctionAbstract $ function ): ?string
51
+ private function getType (\ReflectionParameter $ parameter , \ReflectionFunctionAbstract $ function, ? string $ class ): ?string
47
52
{
48
53
if (!$ type = $ parameter ->getType ()) {
49
54
return null ;
50
55
}
51
56
$ name = $ type instanceof \ReflectionNamedType ? $ type ->getName () : (string ) $ type ;
52
57
53
- if ($ function instanceof \ReflectionMethod) {
54
- $ lcName = strtolower ($ name );
55
- switch ($ lcName ) {
58
+ if (null !== $ class ) {
59
+ switch (strtolower ($ name )) {
56
60
case 'self ' :
57
- return $ function -> getDeclaringClass ()-> name ;
61
+ return $ class ;
58
62
case 'parent ' :
59
- return ( $ parent = $ function -> getDeclaringClass ()-> getParentClass ()) ? $ parent -> name : null ;
63
+ return get_parent_class ( $ class ) ? : null ;
60
64
}
61
65
}
62
66
0 commit comments