27、TP5路由绑定

2018-06-02  本文已影响109人  IUVO

本章我们学习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

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

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

上一篇下一篇

猜你喜欢

热点阅读