src/MVC/Controller/Controller.php
final public function call(MVC $mvc, $method, $fileView = null)
    {
        if (!method_exists($this, $method)) {
            throw new \LogicException(sprintf('Method "s" don\'t exists.', $method));
        }
        # Replace the view object
        $this->view = $mvc->view();
        # Arguments of method
        $arguments = array();
        # Create a reflection method
        $reflectionMethod = new \ReflectionMethod(get_class($this), $method);
        $reflectionParams = $reflectionMethod->getParameters();
        
        foreach ($reflectionParams as $param) {
            if ($paramClass = $param->getClass()) {
                $className = $paramClass->name;
                if ($className === 'MVC\\MVC' || $className === '\\MVC\\MVC') {
                    $arguments[] = $mvc;
                } elseif ($className === 'MVC\\Server\\HttpRequest' || $className === '\\MVC\\Server\\HttpRequest') {
                    $arguments[] = $mvc->request();
                }
            } else {
                foreach ($mvc->request()->params as $keyReqParam => $valueReqParam) {
                    if ($param->name === $keyReqParam) {
                        $arguments[] = $valueReqParam;
                        break;
                    }
                }
            }
        }
        
        $response = call_user_func_array($reflectionMethod->getClosure($this), $arguments);

        if (empty($response)) {
            throw new \LogicException('Response null returned.');
        }
        
        if (is_string($response)) {
            $this->response['body'] = $response;
        } elseif ($mvc->request()->isAjax()) {
            $this->response['body'] = $this->renderJson($response);
        } elseif(is_array($response)) {
            if (!$fileView) {
                throw new \LogicException('File view is null.');
            }
            $class = explode("\\", get_called_class());
            $classname = end($class);
            // Class without Controller
            $classname = str_replace('Controller', '', $classname);
            $file = $classname . "/{$fileView}";
            $this->response['body'] = $this->renderHtml($file, $response);
        }

        return $this->response;
    }
final public function call(MVC $mvc, $method, $fileView = null)
    {
        if (!method_exists($this, $method)) {
            throw new \LogicException(sprintf('Method "s" don\'t exists.', $method));
        }
        # Replace the view object
        $this->view = $mvc->view();
        # Arguments of method
        $arguments = array();
        # Create a reflection method
        $reflectionMethod = new \ReflectionMethod(get_class($this), $method);
        $reflectionParams = $reflectionMethod->getParameters();
        
        foreach ($reflectionParams as $param) {
            if ($paramClass = $param->getClass()) {
                $className = $paramClass->name;
                if ($className === 'MVC\\MVC' || $className === '\\MVC\\MVC') {
                    $arguments[] = $mvc;
                } elseif ($className === 'MVC\\Server\\HttpRequest' || $className === '\\MVC\\Server\\HttpRequest') {
                    $arguments[] = $mvc->request();
                }
            } else {
                foreach ($mvc->request()->params as $keyReqParam => $valueReqParam) {
                    if ($param->name === $keyReqParam) {
                        $arguments[] = $valueReqParam;
                        break;
                    }
                }
            }
        }
        
        $response = call_user_func_array($reflectionMethod->getClosure($this), $arguments);

        if (empty($response)) {
            throw new \LogicException('Response null returned.');
        }
        
        if (is_string($response)) {
            $this->response['body'] = $response;
        } elseif ($mvc->request()->isAjax()) {
            $this->response['body'] = $this->renderJson($response);
        } elseif(is_array($response)) {
            if (!$fileView) {
                throw new \LogicException('File view is null.');
            }
            $class = explode("\\", get_called_class());
            $classname = end($class);
            // Class without Controller
            $classname = str_replace('Controller', '', $classname);
            $file = $classname . "/{$fileView}";
            $this->response['body'] = $this->renderHtml($file, $response);
        }

        return $this->response;
    }
final public function call ( MVC $ mvc , $ method , $ fileView = null ) { if ( ! method_exists ( $ this , $ method ) ) { throw new \ LogicException ( sprintf ( 'Method "s" don\'t exists.' , $ method ) ) ; } # Replace the view object $ this -> view = $ mvc -> view ( ) ; # Arguments of method $ arguments = array ( ) ; # Create a reflection method $ reflectionMethod = new \ ReflectionMethod ( get_class ( $ this ) , $ method ) ; $ reflectionParams = $ reflectionMethod -> getParameters ( ) ; foreach ( $ reflectionParams as $ param ) { if ( $ paramClass = $ param -> getClass ( ) ) { $ className = $ paramClass -> name ; if ( $ className === 'MVC\\MVC' || $ className === '\\MVC\\MVC' ) { $ arguments [ ] = $ mvc ; } elseif ( $ className === 'MVC\\Server\\HttpRequest' || $ className === '\\MVC\\Server\\HttpRequest' ) { $ arguments [ ] = $ mvc -> request ( ) ; } } else { foreach ( $ mvc -> request ( ) -> params as $ keyReqParam => $ valueReqParam ) { if ( $ param -> name === $ keyReqParam ) { $ arguments [ ] = $ valueReqParam ; break ; } } } } $ response = call_user_func_array ( $ reflectionMethod -> getClosure ( $ this ) , $ arguments ) ; if ( empty ( $ response ) ) { throw new \ LogicException ( 'Response null returned.' ) ; } if ( is_string ( $ response ) ) { $ this -> response [ 'body' ] = $ response ; } elseif ( $ mvc -> request ( ) -> isAjax ( ) ) { $ this -> response [ 'body' ] = $ this -> renderJson ( $ response ) ; } elseif ( is_array ( $ response ) ) { if ( ! $ fileView ) { throw new \ LogicException ( 'File view is null.' ) ; } $ class = explode ( "\\" , get_called_class ( ) ) ; $ classname = end ( $ class ) ; // Class without Controller $ classname = str_replace ( 'Controller' , '' , $ classname ) ; $ file = $ classname . "/{$fileView}" ; $ this -> response [ 'body' ] = $ this -> renderHtml ( $ file , $ response ) ; } return $ this -> response ; }
Call a action of controller

@access public
@param MVC $mvc         MVC Application object
@param string $method   Method or Function of the Class Controller
@param string $fileView String of the view file
@return array           Response array
@throws \LogicException
Call a action of controller