美文网首页
26、TP5的别名路由

26、TP5的别名路由

作者: IUVO | 来源:发表于2018-06-02 12:02 被阅读45次
别名路由

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地址,使用请求地址更加短小优雅罢了,借助路由参数中的allowexcept参数实现黑白名单,比较有实际意义。

相关文章

网友评论

      本文标题:26、TP5的别名路由

      本文链接:https://www.haomeiwen.com/subject/rfllsftx.html