很多站长朋友们都不太清楚php路由实现,今天小编就来给大家整理php路由实现,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 thinkphp 怎样动态配置路由,怎样从数据库调取数据来配置路由 2、 ThinkPHP5静态地址路由和动态路由的区别? 3、 关于thinkphp配置路由无效果的解决方案 4、 php怎样不使用框架的情况下本地模拟url路由,实现localhost/a/id/1这种的访问方式 thinkphp 怎样动态配置路由,怎样从数据库调取数据来配置路由用这个方法: Route::get('detail-<name>-<id>', 'product/detail');
<name>和<id> 后台自己定义内容
例:域名/detail-xxxx-23
xxxx 从数据库调取数据
ThinkPHP5静态地址路由和动态路由的区别?静态路由:指的是路由是固定的,是在配置文件里面固定好的。
动态路由:路由带有参数或者使用正则表达式进行匹配。
两者都是在配置文件中进行设置,最大的区别就是静态路由是固定的,一条路由规则匹配一条url,而动态路由就是一条路由匹配多多条url,简单来说。静态路由是一对一,动态路由是一对多。
关于thinkphp配置路由无效果的解决方案1、打开“config.php”,找到'url_route_on',改为true
2、打开“route.php”,例如:“” 改为“api.hyxx测试数据/user/2”(api.hyxx测试数据为之前设置的二级域名)。那么就在return中写成? ? ?'/user/[:index]' => ['/Index.php/api/user/index/id/2',['method'=>'get']],
例如:“”改为“api.hyxx测试数据”.。就写成? ? ' '=>['/index.php/api',['method'=>'get']],??
里面的请求方式,自己去试探。
php怎样不使用框架的情况下本地模拟url路由,实现localhost/a/id/1这种的访问方式要实现路由的话你依然需要框架中路由器的支持,因为服务器不能理解你路径的具体含义.所以你需要一个路由器来帮助服务器去处理特定的信息.
不想用现成的就自己写一个简单的,如下:
首先你需要在htdoc下放一个.htaccess来实现单文件入口:
<IfModule?mod_rewrite.c>
????RewriteEngine?On
????RewriteRule?^$?index.php?_url=?[QSA,PT,L]
RewriteCond?%{REQUEST_FILENAME}?!-f
RewriteCond?%{REQUEST_FILENAME}?!-d?
RewriteRule?^(.*)$?index.php?_url=$1?[QSA,L]
</IfModule>
然后自己写路由咯, index.php
<?php
//这里添加你想要的路径
$route?=?array(
????//(:num)表示匹配任何数字,(:any)表示任意字符
'a/id/(:num)'?=>?'TestController:idAction',
'a/any/(:any)'?=>?'TestController:anyAction',
'a/no' =>?'TestController:noAction',
//这里是默认控制器,就是当你访问localhost的时候用
'_DEFAULT_'?=>?'IndexController:indexAction',
);
//简单的Router
class?Router
{
private?$route;
public?function?__construct(array?$route)
{
$this->route?=?$route;
}
public?function?parse($url)
{
if(empty($url))?{
list($controller,?$action)?=?explode(':',?$this->route['_DEFAULT_']);
return?array(
'controller'?=>?$controller,
'action' ?=>?$action,
'params' ?=>?array(),
);
}
$trans?=?array(
':any'?=>?'[^/]+',
':num'?=>?'[0-9]+'
);
foreach($this->route?as?$u?=>?$d)?{
$pattern?=?'#^'?.?strtr($u,?$trans)?.?'$#';
if(preg_match($pattern,?$url,?$params))?{
list($controller,?$action)?=?explode(':',?$d);
array_shift($params);
return?array(
'controller'?=>?$controller,
'action' ?=>?$action,
'params' ?=>?$params,
);
}
}
header("HTTP/1.0?404?Not?Found");
exit('Page?not?found');
}
}
$r?=?new?Router($route);
$arr?=?$r->parse($_GET['_url']);
require($arr['controller']?.?'.php');
//执行控制器的功能
$dispatcher?=?new?$arr['controller'];
call_user_func_array(array($dispatcher,?$arr['action']),?$arr['params']);
?>
控制器1. Testcontroller.php
<?php
class?TestController?
{
public?function?idAction($id)?
{
echo?"Your?int-only?id?is:?{$id}";
}
public?function?anyAction($any_id)
{
echo?"You?any?id?is:?{$any_id}";
}
public?function?noAction()
{
echo?"This?method?take?no?parameter";
}
}
默认控制器: IndexController.php
<?php
class?IndexController
{
public?function?indexAction()
{
echo?"Hello?World!";
}
}
把.htaccess, index.php, TestController.php, IndexController.php放在htdoc里就可以了
关于php路由实现的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。