예제 #1
0
 /**
  * @param Action  $action
  * @param Request $request
  * @return array
  * @throws \Exception
  */
 protected function _extractActionParameters(Action $action, Request $request)
 {
     $reflectionMethod = new \ReflectionMethod($action->getControllerName(), $action->getMethodName());
     $parameters = [];
     foreach ($reflectionMethod->getParameters() as $parameter) {
         $parameterClass = $parameter->getClass();
         if ($parameterClass) {
             if (is_a($parameterClass->getName(), '\\Wrestler\\Http\\Request\\RouteParams', true)) {
                 $parameters[] = $parameterClass->newInstance($action->getRouteParams());
                 continue;
             }
             if (is_a($parameterClass->getName(), '\\Wrestler\\Http\\Request\\PostData', true)) {
                 $parameters[] = $parameterClass->newInstance($request->getPostData());
                 continue;
             }
             if (is_a($parameterClass->getName(), '\\Wrestler\\Http\\Request\\Query', true)) {
                 $parameters[] = $parameterClass->newInstance($request->getQuery());
                 continue;
             }
             if (is_a($parameterClass->getName(), '\\Wrestler\\Http\\Request\\Headers', true)) {
                 $parameters[] = $parameterClass->newInstance($request->getHeaders());
                 continue;
             }
         }
         $variable = $parameter->getName();
         if ($parameterClass) {
             $variable = $parameterClass->getName() . ' ' . $variable;
         }
         throw new \Exception("Cannot map `{$variable}`");
     }
     return $parameters;
 }
예제 #2
0
 /**
  * @param Request $request
  * @return Action|null
  */
 public function findAction(Request $request)
 {
     $context = new RequestContext();
     $context->fromRequest($request->getInternalRequest());
     $matcher = new UrlMatcher($this->_routes, $context);
     try {
         $params = $matcher->matchRequest($request->getInternalRequest());
     } catch (\RuntimeException $exception) {
         return null;
     }
     $controllerName = $params['_controllerName'];
     $methodName = $params['_methodName'];
     unset($params['_controllerName']);
     unset($params['_methodName']);
     unset($params['_route']);
     return new Action($controllerName, $methodName, $params);
 }