如何从URI中提取页码和ID号?

时间:2011-01-19 01:51:06

标签: php routing uri front-controller

我试图通过单一的入口点加载我的整个网站,index.php?uri
我的目标是拥有漂亮干净的网址,到目前为止我已经提出了......

domain.com/section-name/page-of-that-section

所以第一部分将加载部分的类/文件(邮件,用户,帐户等)

第二部分将加载该部分的页面的课程/页面

到目前为止,这非常简单直接。对我来说棘手的部分是,某些页面会有 ID号(用户ID,消息ID,博客ID,论坛ID,论坛帖子ID,论坛主题ID等),这将是用于通过id号在数据库中查找该记录。

接下来,某些网页也会有页码用于分页。

因此,有时会出现一个页码,有时则不会,与ID号相同,具体取决于它所在的部分。

我正在寻找示例,建议,帮助获取页码和ID号部分工作,我需要能够获取它们并将它们分配给变量 $ page_number $ id_number

下面是我到目前为止的代码以及我需要访问的一些示例url。我不想使用现有的框架,请帮助我,如果你能,我认为我正在接近这个工作。

现在我在身份证号码和页面/前面添加了id /在分页号码前面,这可以改为任何(即; id-423423 page-23 page / 23 page23 ​​p / 23 )只要我可以将数字存储到PHP中的变量

<?php
//get uri
$uri = isset( $_GET['uri'] ) ? $_GET['uri'] : null;

//put uri into array, everything in between '/' will be an array value
$uri1 = explode('/', $uri);

//the first array value will be the SECTION name/class
$section_name = $uri['0'];

//the second array value will always be the PAGE name/class
$page_name = $uri['1'];

//Now some pages will have numbers in the uri
// some are id numbers for things such as a message ID, users ID, comment ID, photo ID, blog ID
// then to complicate it even more sometimes, pages will need paging so will also have a page number in the uri
// I am looking for a way to detect if there is a ID number or page number in uri's for example like listed below.
// right now I have added id/ in front of id numbers and page/ in front of a paging number, this could be changed to anything **(ie; id-423423 page-23 page/23  page23 p/23)** 

mail/inbox/
mail/inbox/page/12
mail/message/id/3432435

users/online/
users/online/page/234
users/profile/id/42234
users/comments/id/42234
users/comments/id/42234/page/3

blogs/list/id/42234
blogs/list/id/42234/page/25
blogs/viewpost/id/1323/             
blogs/create/
blogs/edit/id/34453353

?>

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用正则表达式创建路由系统,这是一项非常简单的任务。你也可以使用一些开源资料:
http://robap.github.com/php-router/

这是我的例子(简单就像一瓶伏特加,但工作):

// for urls like http://mysite.com/1 or http://mysite.com/29 (any digit)
$ROUTE['(\d*)'] = 'pages/showPage/$1' ;
// for url http://mysite.com/admin/new-page
$ROUTE['admin\/new-page'] = 'pages/addPage' ;

function get_route($uri) {
    global $ROUTE ;
    $routes = $ROUTE ;

    foreach ($routes as $rUri => $rRoute) {
        if (preg_match("#^{$rUri}$#Ui", $uri)) {
            $route = preg_replace("#^{$rUri}$#Ui", $rRoute, $uri) ;
            break ;
        }
    }

    $route = explode('/', $route) ;
    $return['controller'] = array_shift($route) ;
    $return['action'] = array_shift($route) ;
    $return['params'] = empty($route) ? array() : $route ;

    return $return ;
}

//testing for http://mysite.com/2
$route = get_route( $_GET[ 'uri' ] ) ;
var_dump( $route ) ;