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 ... 
随机推荐
- 提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在
			提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在 num_user=input('输入一个1-40之间的整数:') num_int=int(num_user ... 
- CentOS6.8系统最小化安装
			一.CentOS系统版本 CentOS-6.8-x86_64 二.安装系统 1.打开VMware主页点击创建虚拟机 2.选择镜像 3.启动虚拟机 4.键入回车键直接进行安装 5.按Tab键选择Skip ... 
- Vue大纲
			Vue框架 Vue ---- vue的基本使用 文本/事件/属性指令 补充: js面向对象 js函数 Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性 Vue --- ... 
- centos7 redis 6379端口telnet不通
			1.查看redis服务是否启动,如图所示,redis已经启动 2.查看是否监听正确的ip和端口 发现问题:端口号6379没错,但是ip是127.0.0.1,表示只能本地访问,问题就出在这. 3.修改r ... 
- ACM-ICPC 2018 南京赛区网络预赛  L. Magical Girl Haze (分层dijkstra)
			There are NN cities in the country, and MMdirectional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). ... 
- HttpRunner学习11--指定用例运行次数
			前言 在HttpRunner中,一般情况下,我们写的用例脚本都是每次运行一次,如果我们想要指定用例运行的次数,可以通过 times 关键字来实现. 测试场景 在这里,我们以访问 TesterHome ... 
- 「SAP技术」SAP MM 明明有维护源清单,还是不能下PO?
			SAP MM 明明有维护源清单,还是不能下PO? 下午收到用户报错说,创建采购订单失败,报错 :Material ### not included in source list despite sou ... 
- sqlserver update join 多关联更新
			由于程序bug,导致之前很多数据入库后信息不全,好在有基础信息表,可以通过基础信息表更新缺失字段信息 1.通过 inner join语法实现多关联更新 update a set a.name = b. ... 
- java之动态代理设计模式
			代理:专门完成代理请求的操作类,是所有动态代理类的父类,通过此类为一个或多个接口动态地生成实现类. 弄清动态代理的关键是清楚java的反射机制,在https://www.cnblogs.com/xix ... 
- C语言程序设计100例之(11):求质数
			例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ... 
