一.安装
1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空。
2.使用官网打包好的TP压缩包(解压即可用)->不是实时更新更新
3.国内的码云和Coding代码托管平台都有ThinkPHP5的镜像

============================================================================================================
二.目录结构
命令行:php think build --module demo
tp5(ROOT_PATH)
├─application(APP_PATH) 应用目录
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─validate 验证目录
│ ├─demo 模块目录(可更改)
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config.php 模块配置文件
│ │ └─common.php 模块公共文件
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共文件
│ ├─config.php 应用配置文件
│ ├─tags.php 应用行为扩展定义文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public 网站对外访问目录
│ ├─index.php 应用入口文件
│ └─static 静态资源目录
│ ├─css 样式目录
│ ├─js 脚本目录
│ └─img 图像目录
├─runtime 运行时目录(可定义)
├─vendor 第三方类库目录(Composer)
├─thinkphp(THINK_PATH) 框架系统目录
│ ├─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 命令行工具入口

目录和文件
目录使用小写+下划线;
类库、函数文件统一以 .php 为后缀;
类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
类名和类文件名保持一致,统一采用驼峰法命名(首字母大写)

=========================================================================================================================
三.控制器
1.URL不区分大小写。
2.控制器类可包括多个操作方法,但是protected、private类型无法直接通过URL访问(public 类型才可通过URL访问)

四.视图
1.存放模板文件(hello.php)。
2.Index控制器类继承了think\Controller类之后,我们可以直接使用封装好的assign和fetch方法进行模板变量赋值和渲染输出。

fetch方法中我们没有指定任何模板,所以按照系统默认的规则(视图目录/控制器/操作方法)输出了view/index/hello.html模板文件。

总结:
use think\Controller;=>class Index extends \think\Controller

===========================================================================================================================
URL:
1.入口文件可以隐藏。(public/index.php)

2.方法名自动转化成小写。

3.方法中进行传参,通过url中参数值进行模板中返回。
完整路由:http://tp5.com/入口文件/模块名/控制器名/方法名/参数名/参数值
完整路由:http://tp5.com/index.php/index/index/hello/res/thinkphp
*如果 public function hello($res=' World')中进行了指定默认值,参数可进行忽略。
定义name(参数可选):http://tp5.com/index.php/index/inedx/hello
*修改配置文件url_param_type=1按照顺序获取可多参数传递。http://localhost/tp5/public/index.php?s=index/index_test/hello/res/a
public function hello($res='',$data=''){
if(!empty($res)){
return 'Hello,'.$res.'!'.$data;
}else{
return 'Hello, World !!!';
}
}
输出结果:Hello,res!a

4.命名:驼峰式命名HelloWorld=>hello_world(如果支持严格区分大小写并支持驼峰法进行控制器访问修改配置文件url_convert)。
*修改配置文件url_convert后严格要求控制器类名。
*pathifo方式:http://localhost/tp5/public/index.php/index/index_test/hello/res
*兼容方式 :http://localhost/tp5/public/index.php?s=index/index_test/hello/res

路由简化:
*路由简化在我的理解上一个是节省了url的长度,方便记忆和查看;一个是因为使用自定义路由,能防止恶意请求,对于网站的安全有帮助。
route.php:'hello'=> 'index/IndexTest/hello',
use think\Route;
Route::rule('hello','index/IndexTest/hello');-->http://localhost/tp5/public/hello/a/b
http://localhost/tp5/public/res/a/b
输出结果:Hello,a!b
*使$res变成可选参数:'hello/[:res]'=> 'index/IndexTest/hello',
*使用route起别名时程序限制性return中的数据。
亦可使用闭包定义路由
return[
'hello'=> function($res='',$data=''){
if(!empty($res) || !empty($data)){
return 'Hello,'.$res.'!!! ------'.$data;
}else{
return 'Hello, World !!!';
}
},
];
Route::rule('hello',function($res='',$data=''){
if(!empty($res) || !empty($data)){
return 'Hello,'.$res.'!!! ------'.$data;
}else{
return 'Hello, World !!!';
}
});
*可使用别名进行url的规则约束,比如定义请求方式,定义后缀名。

===================================================================================================
五。数据库操作
原生:
$result = Db::execute('insert into think_data (id, name ,status) values (5, "thinkphp",1)');
$result = Db::query('select * from think_data where id = 5');
(原则上,读操作都使用query方法,写操作使用execute方法即可)
$result = Db::connect('db1')->query('select * from think_data where id = 1');
链式:
$list = Db::name('data')
->where('status', 1)
->field('id,name')
->order('id', 'desc')
->limit(10)
->select();
*对于事务的支持,最简单的方法就是使用transaction方法,只需要把需要执行的事务操作封装到闭包里面即可自动完成事务

====================================================================================================
六、数据显示
1.foreach标签
foreach标签用于循环输出:
foreach(name,item,key)
name(必须):要输出的数据模板变量
item(必须):循环单原变量
key(可选):循环的key变量,默认值为key
示例:
<foreach name='list' item='vo'>
{$vo.id}
{$vo.name}
</foreach>
foreach标签相对于volist标签简洁,没有volist标签那么多功能。优势是可以对对象进行遍历输出,而volist标签通常是用于输出数组。
--------------------------------------------------------------------------------------------------------------------------------
2.volist标签
volist标签主要用于在模板中循环输出数据集或者多维数组
volist(name,id,offset,length,key,mod,empty)
name(必须):要输出的数据模型变量
id(必须):循环变量
offset(可选):要输出数据的offset
length(可选):输出数据的长度
key(可选):循环的key变量,默认值为i
mod(可选):对key值取模,默认为2(用于偶数行查询等)
empty(可选):如果数据为空显示的字符串
通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。
----------------------------------------------------------------------------------
举例:
在模板定义如下,输出编号和姓名
<volist name='list' id='vo'>
{$vo.id}
{$vo.name}
</volist>
支持输出部分数据,例如输出其中的第5-15条记录:
<volist name='list' id='vo' offset='5' length='10'>
{$vo.id}
{$vo.name}
</volist>
输出偶数行记录:
<volist name='list' id='vo' mod='2'>
<eq name="mod" value='1'>{$vo.name}</eq>
</volist>
mod属性还用于控制一定记录的换行:
<volist name='list' id='vo' mod='5'>
{$vo.name}
<eq name="mod" value='4'><br/></eq>
</volist>
输出循环变量:
<volist name='list' id='vo' key='k'>
{$k}.{$vo.name}
</volist>
如果没有指定key属性的话,默认使用循环变量i,例如:
<volist name="list" id="vo" >
{$i}.{$vo.name}
</volist>
如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,例如:
<volist name="list" id="vo" >
{$key}.{$vo.name}
</volist>
volist还有一个别名iterate,用法和volist是一样。
从2.1版开始允许使用函数设定数据集,如:
<volist name=":fun('arg')" id="vo">{$vo.name}</volist>

<--------------个人原创|转载请注明'逗子'| 适合新手 | 大牛勿喷---------------------------->

TP5学习基础二:目录结构、URL路由、数据操作的更多相关文章

  1. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  2. django-rest-framework 基础二 序列化器和路由

    django-rest-framework 基础二 序列化器和路由 目录 django-rest-framework 基础二 序列化器和路由 1. 序列化器 1.1 Serializer的使用 1.2 ...

  3. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  4. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  5. selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)

    selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver   selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...

  6. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  7. Java学习笔记:基本输入、输出数据操作实例分析

    Java学习笔记:基本输入.输出数据操作.分享给大家供大家参考,具体如下: 相关内容: 输出数据: print println printf 输入数据: Scanner 输出数据: JAVA中在屏幕中 ...

  8. (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作

    Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...

  9. Vue学习(一)Vue目录结构

    安装教程网上一大把,可以自己搜索.记录下学习过程. 认识下Vue的目录结构,取自:https://www.cnblogs.com/dragonir/p/8711761.html vue 文件目录结构详 ...

随机推荐

  1. SpringMVC4+MyBatis+SQL Server2014+druid 监控SQL运行情况

    前言 在基于SpringMVC+MyBatis的开发过程中,我们希望能看到自己手写SQL的执行情况,在开发阶段我们可以配置log4j在控制台里基于debug模式查看,那么上线后,在生产声我们想查看SQ ...

  2. HTML5本地图片裁剪并上传

    最近做了一个项目,这个项目中需要实现的一个功能是:用户自定义头像(用户在本地选择一张图片,在本地将图片裁剪成满足系统要求尺寸的大小).这个功能的需求是:头像最初剪切为一个正方形.如果选择的图片小于规定 ...

  3. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  4. The superclass “javax.servlet.http.HttpServlet" was not found on the Java Build Path错误

    1.异常信息 创建maven web项目时,出现 The superclass "javax.servlet.http.HttpServlet" was not found on ...

  5. Oracle子查询中any、some、all之间的区别

    用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...

  6. Linux集群

    集群的起源: 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要用于科学工程计算,所以这些系统并不为大家所熟知.直到Linux集群的出现,集群的概念 ...

  7. 老李推荐:第2章1节《MonkeyRunner源码剖析》了解你的测试对象: NotePad应用简介

    老李推荐:第2章1节<MonkeyRunner源码剖析>了解你的测试对象: NotePad应用简介   本书脚本相关的示例常会用到Android SDK自带的NotePad这个应用,所以这 ...

  8. Android开发艺术2之Activity的启动模式

    Activity是Android的四大组件之一,他的重要性毋庸置疑,对于这么重要的一个组件,我们首先要知道这些都是由系统进行管理和回调的,要理解Activity的启动模式,我们首先来了解一下Andro ...

  9. 通过php动态传数据到highcharts

    1:在平时工作中,在对数据进行展示的时候,是直接通过后台提供的接口来获取json串,用来展示.今天别人问怎么在本地演示一下请求的动态数据. 2:在本地搭建环境,我用的WampServer,下载地址:h ...

  10. java 基础知识五 数组

    java  基础知识五  数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...