如何通过自定义路由器的URL传递get变量?

时间:2018-02-06 01:55:17

标签: php url parameters get

我正在使用定制路由器制作网站。使用当前代码,我可以添加一个漂亮的URL,例如'/ contact'到网站。我现在到目前为止我需要添加一个产品页面。通常你会有一个类似产品的网址?product_id = $ product_id。但我不知道如何用当前代码实现这个想法。 Route类是添加新URL的地方。

class Route
{
    private $_uri = array();
    private $_method = array();

    /*
     * Builds a collection of internal URL's to look for
     * @param type $uri
     */
    public function add($uri, $method = null)
    {
        $this->_uri[] = '/' . trim($uri, '/');

        if($method != null){
            $this->_method[] = $method;
        }
    }

    public function submit()
    {

        $uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/';
        $routeFound = false;
        foreach($this->_uri as $key => $value){
            if(preg_match("#^$value$#",$uriGetParam)){
                if(is_string($this->_method[$key])){
                    $routeFound = true; 
                    $useMethod = $this->_method[$key];
                    new $useMethod();
                }
                else{
                    $routeFound = true; 
                    call_user_func($this->_method[$key]);
                }
            }
        }
        if(!$routeFound){ 
            http_response_code(404);
            require_once 'pages/404.php';
        }
    }

在索引文件中,我实际上将路线添加到项目

<?php
  require_once 'classes/route.php';
  require_once 'classes/config.php';
  require_once 'classes/model.php';
  require_once 'functions.php';
  require_once 'classes/validator.php';

$route = new Route();
$db = new Db();
$model = new Model();

$route->add('/', function(){
  require_once 'pages/home.php';
});

$route->add('/product', function(){
  require_once 'pages/product.php';
});

$route->add('/contact', function(){
  require_once 'pages/contact.php';
});

$route->add('/admin', function(){
  require_once 'pages/admin.php';
});

$route->add('/login', function(){
  require_once 'pages/test.php';
});

$route->submit();

1 个答案:

答案 0 :(得分:0)

您使用的是哪个框架? 我现在正在学习CodeIgniter,我在那里做的是:

产品的网址是: APPLICATION_PATH /控制器/方法/ ID 对于产品: APPLICATION_PATH /产品/插入/ 1 (使用“1”作为ID示例)

我必须在路径文件中添加一个路由,以指定在我的/方法之后我将拥有一个ID。 (我相信你做的方式取决于你正在使用的框架)

在我的控制器中,我的方法会收到一个参数。就像:

Public function insert($id){
//code...
}