Skip to content

Commit 0cf1f76

Browse files
ConnorVGtaylorotwell
authored andcommitted
[5.4] Allow non-method Callables (#19168)
* Allow non-method Callables * Add callable controller test case
1 parent 13cfd83 commit 0cf1f76

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/Illuminate/Routing/RouteSignatureParameters.php

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ protected static function fromClassMethodString($uses)
3636
{
3737
list($class, $method) = Str::parseCallback($uses);
3838

39+
if (! method_exists($class, $method) && is_callable($class, $method)) {
40+
return [];
41+
}
42+
3943
return (new ReflectionMethod($class, $method))->getParameters();
4044
}
4145
}

tests/Routing/RoutingRouteTest.php

+19
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,17 @@ public function testControllerRouting()
12051205
$this->assertFalse(isset($_SERVER['route.test.controller.except.middleware']));
12061206
}
12071207

1208+
public function testCallableControllerRouting()
1209+
{
1210+
$router = $this->getRouter();
1211+
1212+
$router->get('foo/bar', 'Illuminate\Tests\Routing\RouteTestControllerCallableStub@bar');
1213+
$router->get('foo/baz', 'Illuminate\Tests\Routing\RouteTestControllerCallableStub@baz');
1214+
1215+
$this->assertEquals('bar', $router->dispatch(Request::create('foo/bar', 'GET'))->getContent());
1216+
$this->assertEquals('baz', $router->dispatch(Request::create('foo/baz', 'GET'))->getContent());
1217+
}
1218+
12081219
public function testControllerMiddlewareGroups()
12091220
{
12101221
unset(
@@ -1326,6 +1337,14 @@ public function index()
13261337
}
13271338
}
13281339

1340+
class RouteTestControllerCallableStub extends Controller
1341+
{
1342+
public function __call($method, $arguments = [])
1343+
{
1344+
return $method;
1345+
}
1346+
}
1347+
13291348
class RouteTestControllerMiddlewareGroupStub extends Controller
13301349
{
13311350
public function __construct()

0 commit comments

Comments
 (0)