我试图通过单一的入口点加载我的整个网站,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
?>
答案 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 ) ;