thinkphp5.1琐记

关于tp5.1当中使用环境变量配置文件的问题:
允许使用环境变量配置,并且优先级别比在配置文件中要高,因为在读取配置参数的时候,首先会判断环境变量中是否存在该配置

LTS表示的就是稳定版本

V5.1.18+版本以上,不再建议使用动态配置,由于容器的特性,可能不会生效

门面总结:
use think\facade\Config;//配置类 手册参考: https://www.kancloud.cn/manual/thinkphp5_1/353951
use think\facade\Env;//环境变量类 手册参考:https://www.kancloud.cn/manual/thinkphp5_1/353956

助手函数总结:
config 配置助手函数 手册参考:https://www.kancloud.cn/manual/thinkphp5_1/353951
bind() 绑定类到容器中 手册参考:https://www.kancloud.cn/manual/thinkphp5_1/353958
app() 快速调用绑定到容器中的类并且 自动实例化 手册参考:https://www.kancloud.cn/manual/thinkphp5_1/353958 (要知道哪些系统类库已经自动绑定了 可以通过app()直接访问 我们还可以自己批量绑定类库到容器 一些助手函数我们都可以使用app()来代替)

ThinkPHP支持传统的MVC(Model-View-Controller)模式以及流行的MVVM(Model-View-ViewModel)模式的应用开发

使用路由有一定的性能损失,但随之也更加安全,因为每个路由都有自己的生效条件,如果不满足条件的请求是被过滤的。你远比你在控制器的操作中进行各种判断要实用的多。

模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据
严格来说,控制器不应该过多的介入业务逻辑处理

模型类并不一定要访问数据库,而且在5.1的架构设计中,只有进行实际的数据库查询操作的时候,才会进行数据库的连接,是真正的惰性连接

在应用的公共函数文件中也可以对系统提供的助手函数进行重写

使用助手函数和性能并无直接影响,只是某些时候无法享受IDE自动提醒的便利

首先要进入到项目的public目录下 然后执行命令行模式才可以 不要理解成curl哦 不一样:

php index.php /index/index/index
<IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
 </IfModule>
 作用:No input file specified.的解决办法  放在和入口文件同级别的目录下即可

5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env)

特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上

ThinkPHP5.1符合PSR-4的自动加载规范,内置不再提供类库文件的导入方法,采用命名空间方式定义和自动加载类库文件

依赖注入其实本质上是指对类的依赖通过构造器完成自动注入

任何的URL访问最终都是定位到控制器,由控制器中某个具体的方法执行
一个控制器对应着一个类,如果这里类需要进行统一管理,怎么办?
容器来进行管理,还可以将类的实例作为参数,传递给累的方法,自动触发依赖注入
依赖注入:将对象类型的数据,以参数的方式传递到方法的参数列表
URL访问:通过get方式将数据传递到控制器指定的方法中,但是只能传递字符串,数值
如果要传递一个对象到当前方法中?怎么办?
依赖注入:解决了向类中的方法传对象的问题

依赖注入的类统一由容器进行管理,大多数情况下是在自动绑定并且实例化的。不过你可以随时进行手动绑定类到容器中

门面为容器中的类提供了一个静态调用接口

说的直白一点,Facade功能可以让类无需实例化而直接进行静态方式调用

在进行依赖注入的时候,请不要使用Facade类作为类型约束,而是建议使用原来的动态类

别名是针对门面类产生的 https://www.kancloud.cn/manual/thinkphp5_1/353959 能使用门面的都能用别名来代替 当然也可以使用app()方法来调动容器里面的类自动实例化来完成

有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为钩子,当应用程序运行到这个钩子的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个钩子绑定相关行为就成了一种类AOP编程的思想

一个钩子可以注册多个行为,执行到某个钩子位置后,会按照注册的顺序依次执行相关的行为。但在某些特殊的情况下,你可以设置某个钩子只能执行一次行为,又或者你可以在一个钩子的某个行为中返回false来强制终止后续的行为执行;一个行为可以同时注册到多个不同的钩子上,完全看应用的需求来设计

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。

route目录下的任何路由定义文件都是有效的,默认的路由定义文件是route.php,但你完全可以更改文件名,或者添加多个路由定义文件(你可以进行模块定义区分,但最终都会一起加载)。

可以在rule方法中指定请求类型(不指定的话默认为任何请求类型有效)

可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数
规则匹配检测的时候默认只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望URL进行完全匹配,可以在路由表达式最后使用$符号,例如:

Route::get('new/:cate$', 'News/category');

额外参数
在路由跳转的时候支持额外传入参数对(额外参数指的是不在URL里面的参数,隐式传入需要的操作中,有时候能够起到一定的安全防护作用,后面我们会提到)。例如:

Route::get('blog/:id','blog/read?status=1&app_id=5');
上面的路由规则定义中额外参数的传值方式都是等效的。status和app_id参数都是URL里面不存在的,属于隐式传值,当然并不一定需要用到,只是在需要的时候可以使用。

路由到类的某个方法: \类的命名空间\类名@方法名
这种方式更进一步,可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法,例如:

Route::get('blog/:id','\app\index\service\Blog@read');
//这可是路由到任何的类都行  并且要写的是命名空间哦  和路由到控制器的方法不一样
//https://www.kancloud.cn/manual/thinkphp5_1/353966
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值