212125626526
api.php内容及app下api模块
conf/config.php如果设置自动绑定入口,则无需绑定define('BIND_MODULE','api')。
可直接在app下新建api/controller/Index.php
让public下api.php只能访问app/api/文件夹内容:
绑定到api目录,设置如图:
define('BIND_MODULE','api');
1、关于入口文件的绑定
如果开启入口文件自动绑定的操作
在配置文件config中将'auto_bind_module' => true, 设置为true
则访问入口文件时 系统会自动找到和入口文件名一致的模块 就不用输入模块名了 如localhost/api.php/index/index == localhost/api/index/index
这种方式 和在入口文件定义常量 define('BIND_MODULE', 'api'); 效果一样
区别为:如果befine 绑定的模块不存在,则报错,而config配置则不会,会直接访问其他模块
"auto_bind_module"] => bool(true) 寻找与文件名相同的控制器文件 实现自动绑定
BIND_MODULE绑定入口文件
在应用配置加入'auto_bind_module' =>true
config('BIND_MODULE','admin');的缺点就是如果没有对应的模块或者方法会报错
而要是开启了入口自动绑定模块,这时候访问public/api.php文件就不会报错,会自动执行index模块
'app_multi_module' => true;
define("这里一定要大写" ,‘模块名称一定要小写’)
tp5.1中使用Container::get('app')->bind('admin')->run()->send();
第三方API接口 使用绑定模块
模块 绑定 (小项目可以,大项目不建议模块绑定)
入口文件绑定
就是说,通过在入口文件(index.php)里设置
define('BIND_MODULE','admin');//定义此常量,绑定admin模块,这时整个项目,只能访问admin这个模块
define('BIND_MODULE','admin/index');//绑定admin模块下的index控制器(只允许访问admin模块下的index控制器)
define('BIND_MODULE','admin/index/index');//绑定admin模块下的index控制器下的index方法(只允许访问admin模块下的index控制器下的index方法)
可以使用户在访问网站时,只能访问指定模块下的控制器,或者只能访问指定模块下的指定控制器下的指定方法;
这个功能存在的意义?
当我们的项目在给第三方对接时,就可以重新定义一个入口文件(比如叫api.php),原本默认的入口文件是index.php依然存在,index.php这个入口文件是供正常用户访问项目的入口文件;
通过定义一个新的入口文件来限制第三方访问的模块(比如叫api.php);并且第三方只能通过api.php这个入口文件访问,才能得到他们想要的数据,同时我们一般把第三方想要的数据单独放在一个模块(比如api模块);
这时可以在api.php里面设置,只允许第三方访问指定模块,或者指定方法;其他模块或者其他方法不允许其访问;
在public下可创建多个入口文件,可实现不同入口文件访问不同模块。入口文件名与模块文件必须相同,自动访问与之对应的模块。
这时需要在在conf->config.php 里配置自动绑定 "auto_bind_module" => true
相当于public下api.php文件define("BIND_MODULE","api");
注意新建的入口文件里面的一些内容是默认的:
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加载框架引导文件
require (__DIR__ . '/../thinkphp/start.php');
?>
1、绑定模块:
| 1 | define('BIND_MODULE','admin'); |
如果是这样绑定的,那访问admin模块时只需要加上控制器名和方法名:
如: http://localhost/index/index
或是 http://localhost/user/index
这种是只绑定模块名,可以访问模块下的所有控制器
| 1 | define('BIND_MODULE','admin/index'); |
若是这种方式绑定了 模块名/控制器名 那访问时只可以访问这个控制器的方法,不可以访问其它控制器的方法
如: http://localhost/这种表示访问 admin模块下的index控制器下的index方法
http://localhost/demo 访问admin模块下的index控制器下的demo方法
http://localhost/user/index 表示访问 admin模块下的user控制器下的index方法,这种方式就不能访问了
2、大型项目时就不在这里设置 BIND_MODULE 的绑定了
那就要新建一个入口文件了。比如第三方接口文件操作
那就要新建 public/api.php文件 ,然后再开启入口文件自动绑定,即 访问api.php文件时自动访问 app/api/controller/Index.php文件。
配置文件里'auto_bind_module'=true设置模块自动绑定,则会在入口目录里的文件绑定相同名字的模块,比如api.php会绑定api目录
绑定模块和控制器
1、绑定模块:
define('BIND_MODULE','admin');如果是这样绑定的,那访问admin模块时只需要加上控制器名和方法名:
如: http://localhost/index/index
或是 http://localhost/user/index
这种是只绑定模块名,可以访问模块下的所有控制器
define('BIND_MODULE','admin/index');若是这种方式绑定了 模块名/控制器名 那访问时只可以访问这个控制器的方法,不可以访问其它控制器的方法
如: http://localhost/这种表示访问 admin模块下的index控制器下的index方法
http://localhost/demo 访问admin模块下的index控制器下的demo方法
http://localhost/user/index 表示访问 admin模块下的user控制器下的index方法,这种方式就不能访问了
2、大型项目时就不在这里设置 BIND_MODULE 的绑定了
那就要新建一个入口文件了。比如第三方接口文件操作
那就要新建 public/api.php文件 ,然后再开启入口文件自动绑定,即 访问api.php文件时自动访问 app/api/controller/Index.php文件。
入口文件绑定
就是说,通过在入口文件(index.php)里设置
define('BIND_MODULE','admin');//定义此常量,绑定admin模块,这时整个项目,只能访问admin这个模块
define('BIND_MODULE','admin/index');//绑定admin模块下的index控制器(只允许访问admin模块下的index控制器)
define('BIND_MODULE','admin/index/index');//绑定admin模块下的index控制器下的index方法(只允许访问admin模块下的index控制器下的index方法)
可以使用户在访问网站时,只能访问指定模块下的控制器,或者只能访问指定模块下的指定控制器下的指定方法;
这个功能存在的意义?
当我们的项目在给第三方对接时,就可以重新定义一个入口文件(比如叫api.php),原本默认的入口文件是index.php依然存在,index.php这个入口文件是供正常用户访问项目的入口文件;
通过定义一个新的入口文件来限制第三方访问的模块(比如叫api.php);并且第三方只能通过api.php这个入口文件访问,才能得到他们想要的数据,同时我们一般把第三方想要的数据单独放在一个模块(比如api模块);
这时可以在api.php里面设置,只允许第三方访问指定模块,或者指定方法;其他模块或者其他方法不允许其访问;
在public下可创建多个入口文件,可实现不同入口文件访问不同模块。入口文件名与模块文件必须相同,自动访问与之对应的模块。
这时需要在在conf->config.php 里配置自动绑定 "auto_bind_module" => true
相当于public下api.php文件define("BIND_MODULE","api");
注意新建的入口文件里面的一些内容是默认的:
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加载框架引导文件
require (__DIR__ . '/../thinkphp/start.php');
?>
给外部访问数据的接口编写
入口文件的绑定
简单的官方网站,只有几个页面的情况下。可以使用define(‘BIND_MODULE’, '模块名');来绑定入口文件
模块名 + url index.php 后面的一共是3位 (index/Index/index)

生成api接口,给人看到想看到的模块
入口文件绑定
绑定模块一般用于API接口生成等,适用于小型企业网站,一个控制器够用的情况,大型项目不建议使用。
开启thinkphp绑定模块,方法2种:
1. 在public下新建api.php文件
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加载框架引导文件
require (__DIR__ . '/../thinkphp/start.php');新建与php文件相同名字的模块api。在public下可创建多个入口文件,可实现不同入口文件访问不同模块。入口文件名与模块文件名相同时,自动访问与之对应的模块。
conf->config.php 配置自动绑定 auto_bind_module" => true 相当于public下api.php文件define("BIND_MODULE","api");
当访问localhost/api.php时只能访问api模块下的内容,不可以访问其他模块
2. 手动绑定:模块->控制器->方法
public\index.php//入口文件指定默认模块
define('BIND_MODULE','admin');//定义此常量,访问public/admin.php入口文件时,则默认绑定admin模块,可以访问控制器->方法
define('BIND_MODULE','admin/index');//绑定admin模块index.php文件(只能传递方法)
绑定模块:define('BIND_MODULE','模块名[/控制器[/方法]]');
入口文件 定义BIND_MODULE 常量 可以设置默认访问的方法和模块
入口文件绑定
绑定模块一般用于API接口生成等,适用于小型企业网站,一个控制器够用的情况,大型项目不建议使用。
开启thinkphp绑定模块,方法2种:
1. 在public下新建api.php文件
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加载框架引导文件
require (__DIR__ . '/../thinkphp/start.php');
新建与php文件相同名字的模块api。在public下可创建多个入口文件,可实现不同入口文件访问不同模块。入口文件名与模块文件名相同时,自动访问与之对应的模块。
conf->config.php 配置自动绑定 auto_bind_module" => true 相当于public下api.php文件define("BIND_MODULE","api");
当访问localhost/api.php时只能访问api模块下的内容,不可以访问其他模块
2. 手动绑定:模块->控制器->方法
public\index.php入口文件指定默认模块
define('BIND_MODULE','admin');//定义此常量,访问public/admin.php入口文件时,则默认绑定admin模块,可以访问控制器->方法
define('BIND_MODULE','admin/index');//绑定admin模块index.php文件(只能传递方法)
public目录下可创建多个入口文件,不同的入口文件访问不同的模块
比如1、admin.php入口文件绑定 define('BIND_MODULE','admin');定义此常量,访问public/admin.php入口文件时,则默认绑定admin模块,若admin模块不存在,则访问index模块比如2、tp框架提供了一个入口文件自动绑定功能
在应用配置文件config.php中设置"auto_bind_module"=> true,
入口文件名与模块文件名相同时,自动访问与之对应的模块。
等同于在 admin.php中定义 define("BIND_MODULE","admin");
区别是若admin模块不存在,不会访问index模块会报错
接口入口文件绑定