thinkphp5.0学习笔记
2019-11-11学习笔记
安装TP5.0
a)源代码包下载
在thinkphp官网下载(www.thinkphp.cn)下载 完整版本的TP5.0
b) composer 安装
切换到网站的根目录
切换国内镜像 composer config -g repo.packagist composer https://packagist.phpcomposer.com
下载源码包composer create-project topthink/think composer_tp5 --prefer-dist
项目名
c) git 安装TP5.0
首先命令行切换到网站根目录
拷贝项目仓库git clone https://github.com/top-think/think git_tp5
切换到git_tp5目录下
拷贝核心框架代码 git clone https://github.com/top-think/framework thinkphp
1.目录结构
|--applcation 应用目录 是整个网站的核心目录
|-----|-----index 前台目录
|-----|-------|----controller 控制器
|-----|-------|----modle 数据模型
|-----|-------|----view 页面
|-----|-----admin 后台目录
|--extend 扩展类库目录
|--public 静态资源和入口文件
|-----|-----static 存放静态资源 css js img
|-----|-----index.php 入口文件
|--runtime 网站运行临时目录
|--tests 测试目录
|--thinkphp TP框架的核心文件
|-----|-----lang 语言包
|-----|-----library TP核心文件
|-----|-----tpl 模板页面
|--vendor 第三方扩展目录
2. URL地址了解
http://www.tp.com /index.php /index /Index /index
域名 入口文件 前台 前台控制器 方法
3.了解TP开发模式
(0) 开启调试模式 application\config.php
app_debug' => true,
(1) 连接数据库 application\database.php
(2)在控制器中书写代码
(3)视图页面
2019-11-12学习笔记
1.TP架构的概述
Thinkphp使用了MVC模式,她强制性的使应用程序的输入 处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M) 视图(V) 控制器(C),他们各自处理自己的任务
2.入口文件 ( public\index.php)
入口文件负责整个TP的请求
3.应用 整个application文件
一个应用代表一个网站
4.模块(以前台为例)模块地址在(application\index)
网站的所有前台相关的都与其有关
新建后台模块
在应用目录下(application下)新建一个admin目录
在admin目录下新建model view controller目录
控制器中新建一个Index.php控制器
重复操作,声明命名空间,声明控制器,声明方法
通过地址栏访问http://www.thinkphp.com/index.php/admin/Index/index
5.控制器 控制器目录在(application\index\controller)
书写业务逻辑
//在controller下新建一个User.php控制器,里面应该先写命名空间
namespace app\index\controller
//声明控制器(控制器类名必须跟文件名一致)
class User{
//inedx方法
public function index(){
}
}
地址栏访问 http://www.thinkphp.com/index.php/index/User/index
注意事项:
a.控制器的文件名必须首字母大写
b.控制器必须声明命名空间
c.控制器中类名必须和文件名一致
6.操作方法
操作地址:一般都是在控制器的文件中
新建一个操作(以 前台Index控制器为例)
打开前台控制器(application\index\controller\Index.php)
在控制器中新建test方法
地址栏访问
7.模型(一般都只数据模型 以 前台模型为例)
模型的地址(application\index\model)
作用:负责数据库的相关的处理
8.视图(页面 以 前台页面)
视图地址(application\index\view)
作用:就是网站的页面
9.命名控制
与目录有关(以 前台index控制器命名空间为例)
地址 C:\composer\tp5\application\index\controller
命名空间 namespace app \index\controller
10.跨控制器调用
调用当前模块的控制器例如(application\index\controller\Index.php)里面的index方法调用(application\index\controller\User.php)User控制器
a.使用命名空间
$model = new \app\index\controller\User;
echo $model -> index();
b. 使用use
use app\index\controller\User
$model = new User;
echo $model -> index();
c. 使用系统的方法
$model = controller('User');
echo $model -> index();
调用后台模块的控制器例如(application\index\controller\Index.php)里面的index方法调用(application\admin\controller\Index.php)Index控制器
a. 使用命名空间
$model = new \app\admin\controller\Index;
echo $model -> index();
b. 使用use
use app\admin\controller\Index as AdminIndex ------->与当前的控制器名Index同名的时候需要起别名
$model -> new AdminIndex;或($model -> AdminIndex())
echo $model -> index();
c.使用系统方法
$model -> controller('admin/Index'); 注意注意 '/'一定不能错,不然会打印不出来
echo $midol -> index();
11.调用方法
调用当前控制器中的方法例如application\index\controller\Index.php下的index方法)里面的index方法调用(application\index\controller\Index.php下的test方法)
使用面向对象的方法
a. echo $this -> test();
b. echo self::test();
c. echo Index::test(); ---------> Index是当前的控制器
使用系统方法
d. echo action('test');
调用同一个模块下的其他控制器的方法例如(application\index\controller\Index.php下的index方法)里面的index方法调用(application\index\controller\User.php下的test方法)
使用命名空间
$model = new \app\index\controller\User;
echo $model -> test();
使用系统方法
echo action('User/test');
调用其他模块的其他控制器的方法例如(application\index\controller\Index.php下的index方法)里面的index方法调用(application\admin\controller\User.php下的test方法)
使用命名空间
$model = new \app\admin\controller\User;
echo $model -> tset();
使用系统方法
echo action('admin/User/test');
12.主要分析TP执行的流程
a.入口文件(public\index.php)
作用:定义应用目录常量,定义了一些基础配置
加载框架的引导目录
b.加载框架的引导文件(thinkphp\start.php)
作用:对应用进行运转
引导基础文件
c.加载框架的基础引导文件(thinkphp\base.php)
作用:加载了系统常量
引入了一个loader类(thinkphp\library\think\Loader.php)
引入环境变量
注册自动加载机制
注册异常处理机制(thinkphp\library\think\Error.php)
加载管理配置(thinkphp\convention.php)
d.运行应用(thinkphp\library\think\App.php)下的run方法
做了什么操作:加载当前控制器中的initCommon()方法
加载当前控制器的init()方法
加载各种配置文件
加载公共文件
加载语言包
设置时区
记载当前控制器routeCheck() 方法 路由检测
调用控制器中的exec方法
根据用户请求进行分发处理
根据不同请求类型加载对应文件 module方法
加载到对应的控制器和对应的方法
e.响应输出
用户看到的所有界面就加载出来了
2019-11-15
1.配置文件的格式
thinkphp支持多种格式的配置格式,但是最终都是解析为php数组
我们主要的形式就是数组
return[
'name' => '',
'age' => '',
]
2.配置
a.惯例配置
惯例配置的目录(thinkphp\convention.php)
注意: 一般不建议修改惯例配置
b.应用配置
应用配置目录(application\config.php)
c.扩展配置
扩展配置目录(application\database.php)数据库配置目录 (application\extra\queue.php)用户可以自定义配置目录
扩展配置其实就是对配置文件进行分目录管理
读取database中的扩展项
dump(config(扩展文件名.password));
dump(config(database.password));
读取所有的database扩展
dump(config('database'));
自定义扩展配置(application\extra)下可以新建user.php扩展项
d.场景配置
解决问题
开发过程中可能在不同环境下进行开发
如何使用
修改应用配置(application\config.php)里面的第22行,应用模式状态
'app_status' => 'home', 指的是家庭环境下
在应用目录下新建(application)对应的文件名(home.php)
在home.php里面书写相关配置
e.模块配置
解决问题
每一个模块都有自己特有的配置
如何使用(以前台模块为例)
在前台模块下(application\index)新建一个config.php
打开配置文件书写配置
<?php
return [
'index' => '我是前台配置',
];
f.动态配置
系统方法
//config('参数1','参数2');
config('name','php开发');
系统类
\think\Config::get('name','php开发');
use \think\Config;
Config::set('name','php开发');
3.读取配置
当惯例配置文件存储的是一条配置
'name' => 'mryang'
系统函数读取配置
config('name');
通过系统类读取配置 如果配置项存在直接输出 , 不存在输出为NULL
\Think\Config::get('name');
dump('\Think\Config::get('abc'));
使用use
use \think\Config;
echo Config::get('name');
当惯例配置文件存储的是数组
people =>[
'name' => 'mryang',
'age' => 24,
'sex' => '男',
]
系统函数读取配置
echo config('people'); 输出为数组里面的值
通过系统类读取配置
\Think\Config::get('people.name'); 输出数组里面的name值
使用use
use \think\Config;
echo Config::get('people');
读取所有配置
dump(config());这样就可以读取所有配置
4.环境变量配置
a.tp5.0支持环境变量配置
b.设置环境变量配置
打开网站的根目录(D:\www\tp5)新建.env
书写环境配置(注意不支持中文)
name = yunzhimeng
age = 18
c.读取环境配置
命名空间
dump(\think\Env::get('name'));
dump(\think\Env::get('abc','不存在时使用默认值'))
dump(\think)Env::get('database.type') 不能读取全部数组配置,只能读取数组中配置中的某一个
使用use
use \think\Env;
dump(Env::get('name'));
dump(Env::get('database.type')) 不能读取全部数组配置,只能读取数组中配置中的某一个
d.如何使用
打开配置文件
use \think\Env
return [
//应用调试模式
'app_debug' => Env::get('app_debug',false),
//应用模式状态
'app_status' => Env::get('app_status',''),
];
配置文件的加载顺序
优先级
动态配置 > 模块配置 > 场景配置 > 扩展配置 > 应用配置 > 惯例配置
加载顺序
惯例配置 > 应用配置 > 扩展配置 > 场景配置 > 模块配置 > 动态配置
配置的实现原理
后面的加载的配置,把前面同名覆盖
总结:
系统类(thinkphp\library\think)
Config 设置和获取配置文件
系统方法(thinkphp)
Controller 实例化控制器
action 调用模块的方法
config 设置和读取配置
dump 浏览器友好的变量输出
thinkphp5.0学习笔记的更多相关文章
- thinkphp5.0学习笔记(三)获取信息,变量,绑定参数
1.构造函数: 控制器类必须继承了\think\Controller类,才能使用: 方法_initialize 代码: <?php namespace app\lian\controller; ...
- thinkphp5.0学习笔记(二)
本文为公司制作API接口后台的小结! 1.命名注意事项: 不要使用易混淆的名字,如index,index01... 我喜欢用拼音... 比如: public function zhuce(Reques ...
- thinkphp5.0学习笔记(二)API后台处理与命名空间
命名空间 先来看命名空间吧: 命名空间是学习TP的基础, <?php namespace app\lian\c1; class yi{ public $obj = "这是第一个空间里面 ...
- thinkphp5.0学习笔记(一)基础知识与URL访问
1.目录结构: 其中thinkphp子目录是框架核心目录 thinkphp结构: 2.入口文件 默认自带的入口文件位于public/index.php 应用目录为application,其结构: in ...
- thinkphp5.0学习笔记(四)数据库的操作
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理.采用PDO ...
- DirectX 总结和DirectX 9.0 学习笔记
转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 对 HTML 语义化的理解
简述一下你对 HTML 语义化的理解? 用正确的标签做正确的事情. html 语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析; 即使在没有样式 CSS 情况下也以一种文档格式显示,并 ...
- 阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)
一.谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动.创建连接.创建 ...
- 面试BAT前先搞定这18道MySQL经典面试题(含答案解析)
一.MySQL的复制原理以及流程 (1)复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在使用start ...
- 35个Java代码优化的细节,你知道几个?
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- 稳定易用的 Django 分页库,完善分页功能
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在 通过 Django Pagination 实现简单分页 中,我们实现了一个简单的 ...
- hdu 6301 Distinct Values (贪心)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- django基础之day05,F与Q查询,Q查询的高级用法
#F与Q查询 #*************************** F 查询 ******************** # F 查询数据库中的其他字段!!! #1.查询库存数大于卖出数的书籍 fr ...
- Python与线性代数基本概念
在Python中使用Numpy创建向量: x = np.array([1, 2, 3, 4]) 创建3 x 3矩阵 B = np.array([[1, 2],[3, 4],[5, 6]]) Shape ...
- oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...
- EtreCheck是否修复恶意软件和广告软件?为什么EtreCheck无法制作截图?
EtreCheck for Mac是一款Mac上的软件,有很对人对这款软件并不熟系,今天小编就来给大家介绍一下这款软件最常出现的问题—EtreCheck是否修复恶意软件和广告软件?为什么EtreChe ...