将params路由到控制器

问题描述 投票:-1回答:1

我正在研究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();
        }
      }
    }
  }
?>
php url-routing
1个回答
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
    }
  }
?>
© www.soinside.com 2019 - 2024. All rights reserved.