turn URL route into funciton arguments php mvc

后端 未结 3 1853
野的像风
野的像风 2020-12-19 23:13

I\'m writing a custom MVC framework for a PHP project and everything is great until it comes to getting arguments from the URL route. I\'m stuck on passing parts of the URL

相关标签:
3条回答
  • 2020-12-19 23:53

    For anyone who wants to know what I ended up doing, the final code is below... (this is from my router.class.php)

    <?php
    
    $route = (empty($_GET['rt'])) ? '' : $_GET['rt'];
    $this->route = explode('/', $route);
    
    /*** a new controller class instance ***/
    $class = $this->controller . 'Controller';
    $controller = new $class($this->registry);
    
    /*** load arguments for action ***/
    $arguments = array();
    foreach ($this->route as $key => $val) 
    {
        if ($key == 0 || $key == 1)
        {
        }
        else
        {
            $arguments[$key] = $val;
        }
    }
    
    /*** execute controller action w/ parameters ***/
    call_user_func_array(array($controller, $action), $arguments);
    
    ?>
    

    if my URL was

    http://mysite.com/documentation/article/3
    

    my controller looks like this...

    <?php
    
    Class documentationController Extends baseController 
    {
    
        public function article($article_ID = '')
        {
            echo $article_ID; //shows 3
        }
    
    }
    
    ?>
    

    Thanks for the help.

    0 讨论(0)
  • 2020-12-19 23:59

    Simply put, RewriteRules handle this. However within each framework is more complex routing code that directs requests and data to the specific Controller.

    My suggestion would be to look at the code within these other frameworks and research how they solve these problems. Those you mentioned are open source.

    0 讨论(0)
  • 2020-12-20 00:02

    The easiest way to handle this is to use the call_user_func_array() function. You would use it as follows:

    call_user_func_array(array($controller, $method), $params);
    

    $controller would be the controller object you have already created, and $method would be the controller's method. Then $params is an array of the parameters collected from the URI. You would just need to take out the controller/method portion of the URI.

    You could also do this using Reflection, but this typically is slower than using the above method.

    0 讨论(0)
提交回复
热议问题