-
本教程是对tp5框架的剖析;剖析框架中的框架的目录架构、组成部分、所有执行流程执行原理等等;只需要过一遍有点印象就行,不深入理解也没有关系;框架的熟练运用和理解需要在以后的实战中进行;或者以后经过多次实战开发以后,可以再回来看本教程,那个时候理解起来更深刻,更有同感;
我们最终的目的就是:可以熟练的使用框架进行项目开发;充分利用框架中的各种功能的设置给我们带来的便利查看全部 -
记住:框架所有默认配置信息:都在convention.php中
我们要针对项目单独做配置;就去convention.php中找到默认配置;
复制粘贴到conf下的config.php中进行设置;开启session也是在config.php中开启查看全部 -
这里有个小知识点;使用.html作为后缀来隐藏我们本身的编程语言;这样让我们的网站稍微安全一些;也可以通过修改配置文件来修改文件的后缀名
查看全部 -
分清PHP内置函数和tp框架内置函数;
这是两码事;查看全部 -
url中 ?id=10这是get的传参方式
查看全部 -
index.php入口文件中只需要定义一些常量,包括引入框架的引导文件
查看全部 -
tp是一个单入口框架,所有请求都进入index.php入口文件;我们通过index.php来接受所有http请求(即用户请求),请求中的所有参数,我们都可以通过Request这个对象接受和处理;
获取请求对象的三种方式:
1、助手函数
$request = request( );
dump($request);//即可打印出请求的对象
2、使用think下的request类获取实例(单例模式))
需要先加载request命名空间
use think\Request;()
public function index( ){
$request = Request::instance( );
dump($request);即可打印出请求的对象
}
3、直接注入到方法(建议使用)
需要先加载request命名空间
use think\Request;
在方法中传入request对象参数 如下:
public function index(Request $request){
dump($request);
}
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例;比如Config类,Config::get('key'); Request类,Request::instance( );等等,框架中各自只有这一个类;
并且单例模式那个类只需要实例化一次,在整个框架下都可以直接使用了查看全部 -
路由:url简化
步骤:
1.先在应用配置文件中定义
conf/config.php配置里设置
// 是否开启路由
'url_route_on' => true,
// 是否强制使用路由,当开启强制路由,一定要用路由,值为true即为开启
'url_route_must'=> false
2.然后再conf文件夹下新建自定义路由文件route.php(文件名称必须为route.php)
在里面定义规则:
return ['news/:id' =>'Index/index/index'];
这时访问index模块下的index控制器下的index方法,并传参数id时,就可以这样localhost/news/5访问就可以
url()助手函数,当采用路由时,可将页面上的默认访问URL改为路由访问URL。
即echo url('index/index/index',['id' => 10]);打印出来的结果是 localhost/news/10
tp5路由
1.这里所说的路由是tp5才引入的路由概念
2.如何在tp5中使用路由
a.通过配置url_route_on参数(默认为开启),在config.php同级目录下创建route.php文件配置路由规则,如图所述
b.通过配置url_route_must参数,如果强制开启路由后,那么tp中通过path_info访问的url规则将失效,所有操作的访问都需要在route.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');
?>
查看全部 -
thinkphp在路由中(url中)隐藏入口文件index.php时
若服务器为apache 可在http.conf配置文件中
修改 LoadModule rewrite_module modules/mod_rewrite.so 去掉#
修改AllowOverride None 为 AllowOverride All
同时还需要注意项目public目录下的.htaccess重定向文件(框架已经为我们准备好了),若项目端口不是默认的80端口,需将.htaccess文件中
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
改为:
RewriteRule ^(.*)$ ?index.php/$1 [QSA,PT,L] 加上?表示匹配端口,或改为
RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]
隐藏入口文件 1.什么是隐藏入口文件:其实就是将入口文件index.php不显示在路由中,例如:在不开启隐藏入口文件设置下,需要访问应用默认的index方法,需要这样写:localhost/index.php/index/index/index,如果开启隐藏入口文件设置,那么将index.php拿掉也是可以访问
2.如何来设置隐藏入口文件:apache提供重写静态规则在public目录下创建.htaccess文件,默认apache会去访问这个文件,实现隐藏的需求;nginx需要在nginx.conf文件中配置静态规则(规则可百度)查看全部 -
单入口文件的定义: 应用程序所有的http请求都由一个文件接收并由该文件转发到功能代码中
查看全部 -
thinkphp是一个单入口文件框架;所有请求都通过public文件夹下的index.php进入,通过携带不同的参数,转发到相应的控制器中来实现相应的功能;
单入口文件的定义: 应用程序所有的http请求都由一个文件接收并由该文件转发到功能代码中
在入口文件中可以进行以下操作:
1.必须引入thinkphp框架的引导文件(它可以帮助过滤些网站的安全、检测的问题)
2.可以在这里定义在thinkphp/base.php中有的一些常量,如应用目录常量、配置文件目录常量等。没定义的话则会使用base.php中的默认值。查看全部 -
这些常量框架系统已经在thinkphp目录下base.php定义过了;
我们只是在其他地方定义会把他覆盖,即允许重定义;这些是默认定义而已查看全部 -
1.什么是环境变量
tp除了加载项目配置config.php,还会去加载一个可能存在的 env.php ,位于项目根目录下,也就是跟composer.json同级。
有点类似于场景配置,就是说在不同的情况下,项目对配置的要求会有所不同,比如项目的开发环境、预上线环境、测试环境、生产环境等等对配置的要求都不同;这个时候我们就要切换到相应的配置;
2.方法步骤:
a.在和app文件夹同级目录下,新建".env"或者env.php这个文件;
env.php格式和配置文件一样,返回一个数组,例如:
<?php
return [
'app_debug' =>false
];
?>
如果是新建的文件格式是.env,里面就不用<?php?>标识符了;直接书写 'app_debug' =>false这样就行;
通过以上方式就算是初步把env配置设置好了,下面步骤就是开始使用env里面的配置了;
b.接下来我们要掌握怎么获取到.env文件里面的配置了;
例:我们在.env文件里书写了status=dev,接下来我们在conf文件下的config.php里面来获取这个设置:
在config.php文件里与环境变量相关的都从.env配置文件中获取值
<?php
use think\Env;//注意这里别忘了写
return [
//tp5提供了一个惯例参数app_status,只需要改变它的值就能实现一键切换运行环境
'app_status' => Env::get('status','dev');
];
使用Env::get()方法获取配置的参数值;(或者$_ENV['a'])对于组参数需要这样使用Env::get(database.user);
同时系统也会自带环境变量;查看所有环境变量的方式dump($_ENV);
3.env.php优先级:高于config.php;就是说.env里的设置会覆盖config.php里的配置;
查看全部 -
config类和助手函数config();主要功能获取和设置配置的两种方法
tp5的全局config()函数;
1.实现的原理
a.config()函数的所有功能来源于thinkphp框架目录下library目录下的think目录下的config.php类提供的方法
b.通过thinkphp框架目录下的helper.php文件定义了一个全局的function config()方法,根据传参调用config.php类中不同的方法实现不同的功能,注意Config是首字母大写,因为tp5中所有类首字母都是大写
2.config()函数的使用
a.可以在项目任何地方调用
b.因为不能确保在helper.php文件定义全局function config()方法之前是否已经定义了,所以在项目中建议使用config.php中的类方法操作整个框架的配置参数
c.项目文件中通过 use think\config 引入类方法,因为是静态类,所以通过 Config::get() 可以获取所有配置的参数
获取配置参数的值:Config::get('key'); 等价于 config('key');
设置配置参数的值:Config::set('key', 'value'); 等价于 config('key', 'value');
设置配置参数的作用域:Config::set('key', 'value', '作用域'); 等价于 Config('key','value','作用域');
检测配置参数是否存在:Config::has('key'); 等价于 Config('?key');
注意:参数不存在或者值为null,var_dump时都返回false;例:key=null; $a=Config::has('key'); var_dump($a);则返回false;
设置配置时,注意所设置的配置的服务作用域;
例:Config::set('key', 'value', 'index');设置配置的作用域是服务index模块的,那么获取的时候也要加上作用域
Config::get('key','index');
查看全部
举报