当前位置: 首页 > news >正文

后端_ThinkPHP5

简介
免费开源,面向对象的轻量级PHP开发框架,实现懒性加载,灵活的路由,依赖注入,请求缓存,查询语法,支持Composer.

Git安装:

git clone https://github.com/top-think/think   再 clone https://github.com/top-think/framework 将名称改为thinkphp
运行环境: PHP >= 5.4.0 (完美支持PHP7), PDO PHP Extension, MBstring PHP Extension  ,CURL PHP Extension 

目录命名:

     │  ├─index              模块目录(可更改)
     |  |project  应用部署目录
     ├─application           应用目录(可设置)
     │  ├─common             公共模块目录(可更改)
     │  │  ├─config.php      模块配置文件
     │  │  ├─common.php      模块函数文件
     │  │  ├─controller      控制器目录
     │  │  ├─model           模型目录
     │  │  ├─view            视图目录
     │  │  └─ ...            更多类库目录
     │  ├─command.php        命令行工具配置文件
     │  ├─common.php         应用公共(函数)文件
     │  ├─config.php         应用(公共)配置文件
     │  ├─database.php       数据库配置文件
     │  ├─tags.php           应用行为扩展定义文件
     │  └─route.php          路由配置文件
     ├─extend                扩展类库目录(可定义)
     ├─public                WEB 部署目录(对外访问目录)
     │  ├─static             静态资源存放目录(css,js,image)
     │  ├─index.php          应用入口文件
     │  ├─router.php         快速测试文件
     │  └─.htaccess          用于 apache 的重写
     ├─runtime               应用的运行时目录(可写,可设置)
     ├─vendor                第三方类库目录(Composer)
     ├─thinkphp              框架系统目录
     │  ├─lang               语言包目录
     │  ├─library            框架核心类库目录
     │  │  ├─think           Think 类库包目录
     │  │  └─traits          系统 Traits 目录
     │  ├─tpl                系统模板目录
     │  ├─.htaccess          用于 apache 的重写
     │  ├─.travis.yml        CI 定义文件
     │  ├─base.php           基础定义文件
     │  ├─composer.json      composer 定义文件
     │  ├─console.php        控制台入口文件
     │  ├─convention.php     惯例配置文件
     │  ├─helper.php         助手函数文件(可选)
     │  ├─LICENSE.txt        授权说明文件
     │  ├─phpunit.xml        单元测试配置文件
     │  ├─README.md          README 文件
     │  └─start.php          框架引导文件
     ├─build.php             自动生成定义文件(参考)
     ├─composer.json         composer 定义文件
     ├─LICENSE.txt           授权说明文件
     ├─README.md             README 文件
     ├─think                 命令行入口文件
     注意,如果是mac/linux环境下,请确保runtime目录有可写权限,建议public目录作为web目录访问内容.

命名规范:

  • 目录使用小写+下划线,类库,函数文件统一以.php为后缀;
  • 类名和文件名保持一致,以骆驼峰命名法(首字母大写);
  • 函数的命名使用小写字母和下划线的方式,方法的命名
  • 使用骆驼峰法(首字母小写),属性的命名使用骆驼峰(首字母小写);
  • 常量以大写字母和下划命名,配置参数以小写字母和下划线命名

架构
ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织,MVC模式会强制使应用程序的输入,处理和输出分开.默认开启路由.

    (1)应用在ThinkPHP中是一个管理系统架构以及生命周期的对象.一个应用是由多个模块组成,这些应用通常是应用目录下面的子目录,每个模块都有自己的独立配置文件,公共文件,类库文件.每个模块下面拥有MVC类库及配置文件,一个模块都有多个控制器来负责响应请求.
    (2)控制器主要负责请求的接受,并调用相关的模型处理,最后通过视图输出.注意控制器不应该过多的介入业务逻辑处理.
    (3)start.php就是系统默认的一个引导文件,加载系统常量定义,加载环境变量定义文件,注册自动加载机制,注册错误和异常处理机制,加载惯例配置文件,执行应用.
    (4)生命周期:入口文件-->引导文件-->注册自动加载(系统会调用Loader::register()方法注册自动加载)-->注册错误和异常机制-->应用初始化-->URL访问检测-->路由检测-->分发请求-->响应输出-->应用结束.
    (5)入口文件:所有的应用都有一个入口文件开始,不同的应用的入口文件是类似的.入口文件主要完成定义框架路径,项目路径(可选),定义系统相关常量,载入框架入口文件(必须)
    (6)URL访问:ThinkPHP5.0在没有启用路由的情况下典型的URl访问规则是: https;//www.baidu.com/index.php/模块/控制器/操作[参数名/参数值]. URL是不区分大小写的,URL里面的模块/控制器/操作名会自动转换为小写.

配置:

 ThinkPHP提供全局配置功能,使用PHP返回数组定义,支持惯例配置,公共配置,模块配置,扩展配置,场景配置,环境变量配置和动态配置。系统的配置参数通过静态变量全局获取的,配置功能由\think\Config类完成。
 配置的加载顺序:惯例配置->应用配置->扩展配置->场景配置->模块配置->动态配置。
 --

调试模式和日志

建议在开发阶段一直开启,正式部署关闭调试模式.'app_debug' =>false, 可配置.env文件的格式 app_debug = true 但定义之后,配置文件中定义app_debug将无效.
优势在于:开启日志记录,错误信息和调试信息都会详细记录,便于调试,详细记录整个执行过程,记录SQL日志,通过Trace功能更好的调试和发现错误.
注意:(1)关闭调试模式还提示错误信息,可以设置 "show_error_msg" => true,(2)在异常捕获中不要使用thinkController类的error,success和redirect方法.
五种调试:Trace调试,变量调试,性能调试,SQL调试,远程调试和404页面.

  • Trace调试功能是提供给开发人员的一个用于开发调试的辅助工具,显示当前页面的操作的请求信息,运行情况,错误提示并支持自定义显示.可以设置 'app_trace' => true,可以配置修改显示功能和显示区域.

       基本信息一栏显示了当前请求的运行信息,包括运行时间、吞吐率、内存开销和文件加载等基本信息,通过这个页面可以对当前的请求有一个直观的了解,例如当前请求的内存开销是否过大,查询次数是否在合理的范围之内等等。
       文件信息一栏则按加载顺序显示了当前请求加载的文件列表。
       流程信息一栏则会显示当前请求做了哪些操作,大家可以在开发的过程中经常关注下不同页面的请求和区别,该栏的内容开启调试模式后可见。
       错误信息一栏会显示页面执行过程中的相关错误,包括警告错误(由于ThinkPHP5.0默认情况下对错误零容忍,所以你在正常情况下基本看不到任何错误,因为有任何错误都会直接抛出异常)。
  • 变量调试功能.
  • 性能调试.
  • SQL调试功能开启可以在日志文件中看到详细的SQL执行记录以及性能分析.可以监听SQL.
  • 远程调试

URL和路由:
路由让URL更加规范,隐式传入额外请求参数,统一拦截并进行权限检查等操作.绑定请求参数,使用请求缓存,路由中间件支持.
采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数解析当前请求的模块,控制器和操作.路由功能由thinkRouter类完成。
路由解析的过程: 路由定义-->路由检测-->路由解析->路由调度

  格式:http://serverName/index.php/module/controller/action/param/value/...

入口文件:可以去掉URl地址里面的入口文件index.php,使用PHPStudy则修改Public下的.htaccess文件.

<IfModule mod_rewrite.c> 
Options +FollowSymlinks -Multiviews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 
</IfModule>

参数传入,通过操作方法的参数绑定功能,可以实现自动获取URL的参数.

public function hello($name = 'world')
 {
  return $name;
 }

视图
新建一个view/index.html 在控制器做一下修改.

use think\Controller;

class Index extends Controller
{
    public function hello($name = 'thinkphp')
    {
        $this->assign('name', $name);
        return $this->fetch();
    }
}

请求和响应:
Request请求对象和Response响应对象的基本用法与获取请求变量,以及进行不同的输出响应,跳转,和页面重定向.
Request对象的作用是与客户端交互,收集客户端的Form,Cookies,超链接,或者收集服务器的环境变量.ThinkPHP5的Request对象由thinkRequest类完成.

数据库: Db类操作数据库。
类拆分为Connection(连接器)/Query(查询器)/Builder(SQL生成器),查询语法,闭包查询和闭包事务,链式操作,数据分批处理和数据库SQL执行监听.

  • 数据查询由低到高分三个层次:数据库原生查询(SQL查询),数据库链式查询(查询构造器),模型的对象化查询;
  • ThinkPHP内置抽象数据库访问层,把不同的数据库封装起来,只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现.
  • 使用数据库必须配置数据库链接信息,有多种方法定义,如配置文件定义(database.php),方法配置,模型类定义.如果使用多个模块,不同模块采用不同的数据库连接,每个模块下面单独定义数据库配置
  • 配置链接数据库之后,可以使用数据库运行原生SQL操作,支持query(查询操作)和excute(写入操作)方法并且支持参数绑定.
  • 查询构造器: 查询数据,添数据加,更新数据,删除数据,查询方法,查询语法,链式操作,聚合查询,时间查询,高级查询,视图查询,子查询,原生查询.

    查询数据:

 CREATE TABLE IF NOT EXISTS `think_data`(
    `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NOT NULL COMMENT '名称',
    `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
     PRIMARY KEY (`id`)
     ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
    INSERT INTO `think_data`(`id`,`name`,`status`) VALUES
    (1,'thinkphp',1),
    (2,'onethink',1),
    (3,'topthink',1);
  • 本地新建数据库,再新建数据表:

原生查询,两个方法query和execute,分别用于查询操作和写操作.数据库查询构造器,方便执行数据库操作,构造器基于PDO实现,使用PDO参数绑定,保护应用程序免于SQL注入.

//插入记录
#result = Db:execute('insert into think_data (id,name,status) values (5,"thinkphp",1)');
dump($result);

//更新记录
$result = Db::excute('update think_data set name = "framework" where id = 5 ');
dump($result);

//读取
$result = Db::query('select * form think_data where id = 5');
dump($result);
//query方法返回一个数据集(数组),如果没有查询到数据则返回空数组.

//删除delete
$result = Db::excute('delete form think_data where id =5');
dump($result);

// 显示数据库列表
$result = Db::query('show tables from demo');
dump($result);
// 清空数据表
$result = Db::execute('TRUNCATE table think_data');
dump($result);
//切换数据库操作: 略.

查询语言
ThinkPHP5.0的查询语法,以及如何使用查询构建器进行查询操作,

模型和关联

ThinkPHP采用ORM的封装,基本特性就是表映射到模型,记录映射到模型对象实例,字段映射到对象属性.Db类的查询默认返回的是数组(或者集合),模型类返回的是当前的模型对象实例(或者集合)

API开发

接口数据统一以JSON格式数据输出到客户端.

注意

  • 不要在public目录之外的任何位置放置资源文件,包括application目录,web目录要放到i
  • 入口文件可以被隐藏.
  • php think build --module demo 快速新建模块

相关文章:

  • 从程序员到架构师的最佳技术成长之路
  • Javascript 原型链
  • 交换综合实验一
  • Hanlp分词之CRF中文词法分析详解
  • 急速 debug 实战一(浏览器-基础篇)
  • kubernetes系列07—Pod控制器详解
  • SSH 免密登录
  • Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)
  • vivo Z3i标准版评测 强劲配置带来酣畅体验
  • PAT A1120
  • 都是 HBase 上的 SQL 引擎,Kylin 和 Phoenix 有什么不同?
  • 2019年web前端发展趋势预测(附web前端视频教程全集)
  • 理清楚Vue的结构
  • 阿里云ACE认证之理解CDN技术
  • 数据分析沙龙杭州站,邀您报名!
  • ComponentOne 2017 V2版本正式发布
  • egg(89)--egg之redis的发布和订阅
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • spring boot下thymeleaf全局静态变量配置
  • springMvc学习笔记(2)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 代理模式
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 近期前端发展计划
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何进阶一名有竞争力的程序员?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 在weex里面使用chart图表
  • ​渐进式Web应用PWA的未来
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​人工智能书单(数学基础篇)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)SpringCloud 整合Python
  • (a /b)*c的值
  • (强烈推荐)移动端音视频从零到上手(上)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)一些感悟
  • ***测试-HTTP方法
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net mvc部分视图
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net程序集学习心得
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • /usr/bin/env: node: No such file or directory
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误
  • [hdu 1247]Hat’s Words [Trie 图]
  • [hdu 4552] 怪盗基德的挑战书