@@ -309,24 +309,6 @@ public function testClassesCanBeInjectedIntoRoutes()
309
309
unset($ _SERVER ['__test.route_inject ' ]);
310
310
}
311
311
312
- public function testClassesAndVariablesCanBeInjectedIntoRoutes ()
313
- {
314
- unset($ _SERVER ['__test.route_inject ' ]);
315
- $ router = $ this ->getRouter ();
316
- $ router ->get ('foo/{var}/{bar?}/{baz?} ' , function (stdClass $ foo , $ var , $ bar = 'test ' , stdClass $ baz = null ) {
317
- $ _SERVER ['__test.route_inject ' ] = func_get_args ();
318
-
319
- return 'hello ' ;
320
- });
321
- $ this ->assertEquals ('hello ' , $ router ->dispatch (Request::create ('foo/bar ' , 'GET ' ))->getContent ());
322
- $ this ->assertInstanceOf ('stdClass ' , $ _SERVER ['__test.route_inject ' ][0 ]);
323
- $ this ->assertEquals ('bar ' , $ _SERVER ['__test.route_inject ' ][1 ]);
324
- $ this ->assertEquals ('test ' , $ _SERVER ['__test.route_inject ' ][2 ]);
325
- $ this ->assertInstanceOf ('stdClass ' , $ _SERVER ['__test.route_inject ' ][3 ]);
326
- $ this ->assertArrayHasKey (3 , $ _SERVER ['__test.route_inject ' ]);
327
- unset($ _SERVER ['__test.route_inject ' ]);
328
- }
329
-
330
312
public function testOptionsResponsesAreGeneratedByDefault ()
331
313
{
332
314
$ router = $ this ->getRouter ();
@@ -420,6 +402,56 @@ public function testRouteParametersDefaultValue()
420
402
$ this ->assertEquals ('foo ' , $ router ->dispatch (Request::create ('foo ' , 'GET ' ))->getContent ());
421
403
}
422
404
405
+ public function testControllerCallActionMethodParameters ()
406
+ {
407
+ $ router = $ this ->getRouter ();
408
+
409
+ // Has one argument but receives two
410
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
411
+ $ router ->get (($ str = str_random ()).'/{one}/{two} ' , 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@oneArgument ' );
412
+ $ router ->dispatch (Request::create ($ str .'/one/two ' , 'GET ' ));
413
+ $ this ->assertEquals (['one ' => 'one ' , 'two ' => 'two ' ], $ _SERVER ['__test.controller_callAction_parameters ' ]);
414
+
415
+ // Has two arguments and receives two
416
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
417
+ $ router ->get (($ str = str_random ()).'/{one}/{two} ' , 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@twoArguments ' );
418
+ $ router ->dispatch (Request::create ($ str .'/one/two ' , 'GET ' ));
419
+ $ this ->assertEquals (['one ' => 'one ' , 'two ' => 'two ' ], $ _SERVER ['__test.controller_callAction_parameters ' ]);
420
+
421
+ // Has two arguments but with different names from the ones passed from the route
422
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
423
+ $ router ->get (($ str = str_random ()).'/{one}/{two} ' , 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@differentArgumentNames ' );
424
+ $ router ->dispatch (Request::create ($ str .'/one/two ' , 'GET ' ));
425
+ $ this ->assertEquals (['one ' => 'one ' , 'two ' => 'two ' ], $ _SERVER ['__test.controller_callAction_parameters ' ]);
426
+
427
+ // Has two arguments with same name but argument order is reversed
428
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
429
+ $ router ->get (($ str = str_random ()).'/{one}/{two} ' , 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@reversedArguments ' );
430
+ $ router ->dispatch (Request::create ($ str .'/one/two ' , 'GET ' ));
431
+ $ this ->assertEquals (['one ' => 'one ' , 'two ' => 'two ' ], $ _SERVER ['__test.controller_callAction_parameters ' ]);
432
+
433
+ // No route parameters while method has parameters
434
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
435
+ $ router ->get (($ str = str_random ()).'' , 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@oneArgument ' );
436
+ $ router ->dispatch (Request::create ($ str , 'GET ' ));
437
+ $ this ->assertEquals ([], $ _SERVER ['__test.controller_callAction_parameters ' ]);
438
+
439
+ // With model bindings
440
+ unset($ _SERVER ['__test.controller_callAction_parameters ' ]);
441
+ $ router ->get (($ str = str_random ()).'/{user}/{defaultNull?}/{team?} ' , [
442
+ 'middleware ' => SubstituteBindings::class,
443
+ 'uses ' => 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@withModels ' ,
444
+ ]);
445
+ $ router ->dispatch (Request::create ($ str .'/1 ' , 'GET ' ));
446
+
447
+ $ values = array_values ($ _SERVER ['__test.controller_callAction_parameters ' ]);
448
+
449
+ $ this ->assertInstanceOf ('Illuminate\Http\Request ' , $ values [0 ]);
450
+ $ this ->assertEquals (1 , $ values [1 ]->value );
451
+ $ this ->assertNull ($ values [2 ]);
452
+ $ this ->assertInstanceOf ('Illuminate\Tests\Routing\RoutingTestTeamModel ' , $ values [3 ]);
453
+ }
454
+
423
455
/**
424
456
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
425
457
*/
@@ -1293,6 +1325,34 @@ public function returnParameter($bar = '')
1293
1325
}
1294
1326
}
1295
1327
1328
+ class RouteTestAnotherControllerWithParameterStub extends Controller
1329
+ {
1330
+ public function callAction ($ method , $ parameters )
1331
+ {
1332
+ $ _SERVER ['__test.controller_callAction_parameters ' ] = $ parameters ;
1333
+ }
1334
+
1335
+ public function oneArgument ($ one )
1336
+ {
1337
+ }
1338
+
1339
+ public function twoArguments ($ one , $ two )
1340
+ {
1341
+ }
1342
+
1343
+ public function differentArgumentNames ($ bar , $ baz )
1344
+ {
1345
+ }
1346
+
1347
+ public function reversedArguments ($ two , $ one )
1348
+ {
1349
+ }
1350
+
1351
+ public function withModels (Request $ request , RoutingTestUserModel $ user , $ defaultNull = null , RoutingTestTeamModel $ team = null )
1352
+ {
1353
+ }
1354
+ }
1355
+
1296
1356
class RouteTestResourceControllerWithModelParameter extends Controller
1297
1357
{
1298
1358
public function show (RoutingTestUserModel $ fooBar )
@@ -1471,6 +1531,31 @@ public function firstOrFail()
1471
1531
}
1472
1532
}
1473
1533
1534
+ class RoutingTestTeamModel extends Model
1535
+ {
1536
+ public function getRouteKeyName ()
1537
+ {
1538
+ return 'id ' ;
1539
+ }
1540
+
1541
+ public function where ($ key , $ value )
1542
+ {
1543
+ $ this ->value = $ value ;
1544
+
1545
+ return $ this ;
1546
+ }
1547
+
1548
+ public function first ()
1549
+ {
1550
+ return $ this ;
1551
+ }
1552
+
1553
+ public function firstOrFail ()
1554
+ {
1555
+ return $ this ;
1556
+ }
1557
+ }
1558
+
1474
1559
class RoutingTestExtendedUserModel extends RoutingTestUserModel
1475
1560
{
1476
1561
}
0 commit comments