
1、新建一个控制器文件/application/index/controller/Demo.php
,写入:
<?php
namespace app\index\controller;
class Demo
{
public function add($n,$m)
{
return $n.'+'.$m.'='.($n+$m);
}
public function sub($n,$m)
{
return $n.'-'.$m.'='.($n-$m);
}
public function mult($n,$m)
{
return $n.'*'.$m.'='.($n*$m);
}
public function div($n,$m)
{
return $n.'/'.$m.'='.round(($n/$m),2);
}
}
2、先用PATH_INFO
的格式访问一下,都能正常输出即可。
3、再在/config/route.php
文件中写上路由规则:
think\Route::get('add/:n/:m','index/demo/add');
think\Route::get('sub/:n/:m','index/demo/sub');
think\Route::get('mult/:n/:m','index/demo/mult');
think\Route::get('div/:n/:m','index/demo/div');
4、测试一下,没有问题。观察一下,发现这些路由规则都有一个共同的规律,就是模块名和控制器名都是一样的,恰好符合别名路由的特征,我们可以用别名路由的方式一次性给index
模块下的demo
控制器下所有的方法快速的注册,修改/config/route.php
文件:
think\Route::alias('math','index/demo'); //别名路由
5、math
别名就相当于index/demo
,所以可以写成http://tp5.com/math/add/20/30
这样的访问方式。
6、我们再创建一个控制器:/application/index/controller/Test.php
:
<?php
namespace app\index\controller;
class Test
{
public function hello()
{
return 'say hello to everyone!';
}
}
7、我们创建一个路由直接路由到Test
类中的hello()
方法,这里使用完全限定名称的方式,所以必须从根目录开始写路由地址,不这么写的话,会从public
目录开始找起,这样就找不着Test
类了:
think\Route::alias('php','\app\index\controller\test');
教程说是这么说,但是我实在没明白,路由写成:think\Route::alias('test','index/test');
也还是照样访问,而且模块控制器层级都一样,实在不明白为什么要写什么完全限定名称的方式,有读者明白的话,希望在评论区给出指导,谢谢!
8、别名路由的路由参数是非常有用的,比如:
think\Route::alias('math','index/demo'['ext'=>'html']);
这样就可以把demo
模块下所有的方法的访问后缀都设置成html
的。
9、我们还能通过别名路由的路由参数来设置白名单:
think\Route::alias('math','index/demo',[
'ext'=>'html',
'allow'=>'add,sub'//白名单
]);
这样,所有访问add,sub
之外的方法的,都会提示模块不存在。
10、既然有白名单,也就有黑名单:
think\Route::alias('math','index/demo',[
'ext'=>'html',
'except'=>'add,sub'//黑名单
]);
下面我们用静态数组来实现同样的功能:
return [
'__alias__'=>[
'math'=>['index/demo',['ext'=>'html','allow'=>'add,sub']],
]
];
别名路由可以进一步简化路由规则,但是不支持变量规则,仅仅是缩短URL地址,使用请求地址更加短小优雅罢了,借助路由参数中的
allow
和except
参数实现黑白名单,比较有实际意义。
网友评论