public function handle(Request $request) { $this->assertControllerKey($request); $controller = $request->attributes->get(RouteAttribute::CONTROLLER); if ($this->isArrayDefinition($controller)) { $result = $this->container->call($controller[0], $controller[1], array_merge($request->attributes->all(), $request->request->all(), $request->query->all())); if ($result instanceof Response) { return $result; } else { if ($request->attributes->get(RouteAttribute::JSON_RESPONSE, false)) { return new JsonResponse($result); } else { return new Response($result); } } } else { $error = "The controller has an invalid [controller,action] signature!" . " You should check the Route creation!"; $this->logger->error($error, ['RequestAttributes' => $request->attributes->add(), $request->getPathInfo()]); throw new InvalidParameterException($error); } }
/** * @expectedException InvalidArgumentException */ public function testCallWithMissingArgs() { $c = new Container(); $result = $c->call(ClassWithMethods::class, 'withDefaultArgs', ['arg2' => 2, 'arg3' => 3]); $this->assertEquals(['a', 'arg2', 'b'], $result); }