Направить параметры в контроллер - PullRequest
0 голосов
/ 30 марта 2019

Я изучаю паттерн MVC, чтобы улучшить свои навыки кодирования, в качестве упражнения я пишу эту систему маршрутов, чтобы отобразить действия и параметры для соответствующих контроллеров. Я протестировал код, и он отлично работает, но я не могу понять, как отобразить несколько параметров на контроллер. Вот мой код, может кто-нибудь предложить мне лучший способ сделать это?

<?php
if( isset($_SERVER['REQUEST_URI']) ){
  $requested_uri = parse_url( $_SERVER['PATH_INFO'], PHP_URL_PATH);
    if( $requested_uri === '' ){
      echo $controller->index();
    }
    elseif( $requested_uri != '' ){
      $requested_uri = explode('/', $_SERVER['PATH_INFO']);

      $class = (string) ucfirst($requested_uri[1]).'Controller';
      $method = (string) $requested_uri[2];

      if( isset($requested_uri[3]) && class_exists($class) ){
        $param = (string) $requested_uri[3];
        $obj = new $class;
        echo $obj->$method($param);
      }
      else{
        if( class_exists( $class ) ){
          $obj = new $class;
          echo $obj->$method();
        }
      }
    }
  }
?>

1 Ответ

1 голос
/ 30 марта 2019

код решения здесь:

<?php
if( isset($_SERVER['REQUEST_URI']) ){
  $requested_uri = parse_url( $_SERVER['PATH_INFO'], PHP_URL_PATH);
    if( $requested_uri === '' ){
      echo $controller->index();
    }
    elseif( $requested_uri != '' ){
      $requested_uri = explode('/', $_SERVER['PATH_INFO']);

      $class = (string) ucfirst($requested_uri[1]).'Controller';
      $method = (string) $requested_uri[2];

      //-----  below part is my idea ... 
      $params = array();

      for($i=3 ; $i<=count(requested_uri) ; $i++ ){
            $params = requested_uri[$i];
      }

      $controllerInstance = new $class();
      call_user_func_array(array($controllerInstance , $method) , $params);

      //---- end part
    }
  }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...