Exemplo n.º 1
0
 /**
  * @param ActionExecutionContext $context
  * @return ActionResult
  */
 public final function execute(ActionExecutionContext $context)
 {
     $this->currentContext = $context;
     if (!method_exists($this, $context->action)) {
         return $this->handleUnknownAction($context);
     }
     $method = new ReflectionMethod($this, $context->action);
     $requestMethod = ReflectionUtil::getRequestMethod($method);
     if ($requestMethod && strtolower($context->request->requestMethod) !== strtolower($requestMethod)) {
         //if @request-method annotation exists and does not match the incoming request method, then the action is not a match
         return $this->handleUnknownAction($context);
     }
     $beforeFilters = $this->getActionFilters($method, 'before');
     foreach ($beforeFilters as $filter) {
         $filter->execute($context);
     }
     $refParams = $method->getParameters();
     //create parameters for action, i.e. model binding
     if (count($refParams) > 0) {
         $params = array();
         $requestValues = array_merge($context->routeMatch->getData(), $context->request->queryString->toArray(), $context->request->post->toArray());
         foreach ($refParams as $param) {
             $type = ReflectionUtil::getParameterType($param);
             $params[$param->getPosition()] = $context->modelBinders->getBinderOrDefault($type)->bindModel(new BindingContext($requestValues, $context, $param->getName(), $type));
         }
         return $method->invokeArgs($this, $params);
     }
     $executedContext = new ActionExecutedContext($context, $method->invoke($this), $method);
     $afterFilters = $this->getActionFilters($method, 'after');
     foreach ($afterFilters as $filter) {
         $filter->execute($executedContext);
     }
     return $executedContext->actionResult;
 }
Exemplo n.º 2
0
 public function testDetectTypeHintedParameterTypes()
 {
     $params = $this->class->getMethod('foo')->getParameters();
     self::assertEquals('ReflectionClass', ReflectionUtil::getParameterType($params[3]));
 }