Параметры маршрутизации к контроллеру

#php #url-routing

#php #url-маршрутизация

Вопрос:

Я изучаю шаблон 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]) amp;amp; 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:

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

 <?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
    }
  }
?>
  

Комментарии:

1. вместо for() цикла, не лучше ли использовать foreach() ?