Skip to content

Commit d35b716

Browse files
committed
Fix #10 support for invokable objects
1 parent d9874ef commit d35b716

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/RequestObjectBinder.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,13 @@ private function matchActionArguments(callable $action)
109109
if (is_array($action)) {
110110
$classReflection = new \ReflectionClass($action[0]);
111111
$actionReflection = $classReflection->getMethod($action[1]);
112-
} else {
112+
} elseif ($action instanceof \Closure || is_string($action)) {
113113
$actionReflection = new \ReflectionFunction($action);
114114
}
115+
else {
116+
$classReflection = new \ReflectionClass($action);
117+
$actionReflection = $classReflection->getMethod('__invoke');
118+
}
115119

116120
$matchedArguments = [];
117121
$arguments = $actionReflection->getParameters();

tests/RequestBinderTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,19 @@ public function testRequestObjectBindingOnClosure()
5353
self::assertInstanceOf(RequestObject\RequestObject::class, $this->request->attributes->get('requestObj'));
5454
}
5555

56+
public function testRequestObjectBindingOnInvokableObject()
57+
{
58+
$action = new class() {
59+
public function __invoke(RegisterUserRequest $requestObj)
60+
{
61+
}
62+
};
63+
64+
(new RequestObjectBinder($this->payloadResolver, $this->validator))->bind($this->request, $action);
65+
self::assertTrue($this->request->attributes->has('requestObj'));
66+
self::assertInstanceOf(RequestObject\RequestObject::class, $this->request->attributes->get('requestObj'));
67+
}
68+
5669
public function testPassErrorsToAction()
5770
{
5871
$this->validRequest();

0 commit comments

Comments
 (0)