예제 #1
0
 /**
  * Dispatch a request on the controller.
  *
  * @param Request $request
  * @return Response
  * @throws InvalidActionReturnValueException
  */
 public function dispatch(Request $request) : Response
 {
     $action = $request->param('action');
     $params = $request->params["arguments"] + ["request" => $request];
     $closure = function () use($action, $params) {
         return $this->callAction($action, $params);
     };
     $middlewares = array_reverse($this->_middlewareRegistry);
     foreach ($middlewares as $middleware) {
         $closure = function (Request $request) use($middleware, $closure) {
             return $middleware->handle($request, $closure);
         };
     }
     $response = $closure($request);
     if (!$response instanceof Response) {
         throw new InvalidActionReturnValueException([get_called_class() . '::' . $action]);
     }
     return $response;
 }