27、TP5路由绑定

本章我们学习TP5的路由绑定知识。

入口绑定

1、以上一章Demo控制器为例,去除路由,以PATN_INFO方式访问:http://tp5.com/index/demo/sub/20/1,访问正常。

2、打开项目的入口文件:/public/index.php,添加个系统常量:

//绑定到指定模块
define('BIND_MODULE','index');

3、这时候,以PATN_INFO方式访问的时候,就可以省略掉index模块:http://tp5.com/demo/sub/20/1。也就是说,我们将所有的访问都绑定到了指定的模块上。

4、除了绑定到指定模块上,我们还能绑定到指定模块下的控制器上:

//绑定到指定模块下面的控制器上
define('BIND_MODULE','index/Demo');

5、这时候,我们就还能省略demo控制器了,进一步简化URL了:http://tp5.com/sub/20/1

这就是入口文件的绑定。


入口自动绑定

1、首先打开惯例配置文件:/thinkphp/convention.php,找到auto_bind_module,复制到自定义配置文件:/config/config.php中,并修改为true:

  // 入口自动绑定模块
  'auto_bind_module'       => true,

2、创建一个新的入口文件:/public/admin.php,写入:

<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 自定义配置目录
define('CONF_PATH', __DIR__ . '/../config/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

3、我们的目标是要实现当访问admin.php的时候能够自动和admin模块绑定。

4、创建admin模块:/application/admin/controller/Index.php,写入:

<?php
namespace app\admin\controller;

class Index
{
  public function index()
  {
    return '我是admin.php入口文件对应的模块下面的方法';
  }
}

5、这样,当我们输入http://tp5.com/admin.php,就会自动执行admin模块下默认控制器下的默认方法。


动态绑定

1、继续以上一章的Demo控制器为例子,正常访问url为:http://tp5.com/index/demo/add/10/11

2、在/config/route.php文件中进行动态路由绑定:

think\Route::bind('index');//绑定到模块

3、绑定了模块后,省略index模块:http://tp5.com/demo/add/10/11

4、还可以绑定到控制器:

think\Route::bind('index/Demo');//绑定到控制器

这样连控制器都可以不写了:http://tp5.com/add/10/11

5、甚至还能绑定到操作:

think\Route::bind('index/Demo/add');//绑定到操作

这时候访问的url简化到发指:http://tp5.com/10/11


绑定到命名空间或者类

1、Demo控制器和Index控制器的命名空间都是app\index\controller,也就是说,如果将命名空间绑定到app\index\controller,那么所有使用该命名空间的控制器,都能直接使用。

2、修改/config/route.php文件:

think\Route::bind('app\index\controller','namespace');

3、那么该命名空间下,我们可以直接写控制器名称来访问:http://tp5.com/index/test/mike/21或者http://tp5.com/demo/add/3/21都可以直接访问。

4、我们还能绑定到命名空间指定的类:

think\Route::bind('app\index\controller\Demo','class');

5、那么当类被绑定后,我们就能直接访问到该类的方法:http://tp5.com/add/3/21


这种直接绑定到命名空间和类的,会直接跳过模块配置文件和公共文件。

1、我们在自定义配置目录下为index模块创建配置文件:/config/index/config.php,写入:

<?php
return [
  'my_frame' => 'TP5',
];

2、修改/config/route.php文件的路由绑定:

think\Route::bind('app\index\controller\index','class');

3、修改index控制器中的方法,返回刚才写的模块配置项:

public function test()
{
    dump(Config::get('my_frame'));
}

4、访问看看:http://tp5.com/test,发现访问不到,输出一个NULL

从而证实了这种绑定方式确实是会跳过模块配置文件和公共文件,需要注意。

路由绑定可以极大的简化项目开发,使开发流程更加清晰可控。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,937评论 18 139
  • 理工寝室商店-微信小程序 疑问小结 当时在XAMMP下mysql目录下的bin下 php -v 不起作用.到ph...
    这个超人不会飞阿阅读 1,740评论 1 1
  • 文章分类 后台文章分类列表页模板导的详细步骤建立数据表blog_category,并添加相应的文章字段使用php ...
    JoyceZhao阅读 1,764评论 0 14
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,568评论 6 427
  • 有一部电影展示的是一个无声的世界,本是为了迎接残障奥运会而拍摄,没有过多的修饰和炒作,但上映后却很受欢迎。 这部电...
    月公子漫谈阅读 360评论 0 4