ThinkPHP6.0的安装,官方文档中有详细的说明,不过在安装之前,大家还是要做一些准备的,就是PHP本地开发环境 的搭建。
官方手册地址:https://www.kancloud.cn/manual/thinkphp6_0/1037609
本地PHP环境的搭建
PHP本地开发环境的搭建
composer的安装和使用
学习PHP大家一定要对composer
有所了解,至少使使用简单的命令。在使用时,注意更换源(国内镜像)。
ThinkPHP6.0的安装
如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下面的命令:
代码语言:javascript复制composer create-project topthink/think tp
这里的tp
目录名你可以任意更改,这个目录就是我们后面会经常提到的应用根目录。
如果你之前已经安装过,那么切换到你的应用根目录下面,然后执行下面的命令进行更新:
代码语言:javascript复制composer update topthink/framework
更新操作会删除thinkphp
目录重新下载安装新版本,但不会影响app
目录,因此不要在核心框架目录添加任何应用代码和类库。
一般情况下,composer
安装的是最新的稳定版本,不一定是最新版本,如果你需要安装实时更新的版本(适合学习过程),可以安装6.0.x-dev
版本。
composer create-project topthink/think=6.0.x-dev tp
如果你没有安装集成开发环境,那么ThinkPHP6.0,可能通下面命令运行起来
进入命令行下面,执行下面指令
代码语言:javascript复制php think run
在浏览器中输入地址:
代码语言:javascript复制http://localhost:8000/
代码语言:javascript复制
ThinkPHP6的入门介绍
开发规范
ThinkPHP6.0
遵循PSR-2
命名规范和PSR-4
自动加载规范,并且注意如下规范:
目录和文件
- 目录使用小写 下划线;
- 类库、函数文件统一以
.php
为后缀; - 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
- 类文件采用驼峰法命名(首字母大写),其它文件采用小写 下划线命名;
- 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);
函数和类、属性命名
- 类的命名采用驼峰法(首字母大写),例如
User
、UserType
,默认不需要添加后缀,例如UserController
应该直接命名为User
; - 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如
get_client_ip
; - 方法的命名使用驼峰法(首字母小写),例如
getUserName
; - 属性的命名使用驼峰法(首字母小写),例如
tableName
、instance
; - 特例:以双下划线
__
打头的函数或方法作为魔术方法,例如__call
和__autoload
;
常量和配置
- 常量以大写字母和下划线命名,例如
APP_PATH
; - 配置参数以小写字母和下划线命名,例如
url_route_on
和url_convert
; - 环境变量定义使用大写字母和下划线命名,例如
APP_DEBUG
;
数据表和字段
- 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如
think_user
表和user_name
字段,不建议使用驼峰和中文作为数据表及字段命名。
请理解并尽量遵循以上命名规范,可以减少在开发过程中出现不必要的错误。
框架的目录结构
相对于
5.1
来说,6.0
版本目录结构的主要变化是核心框架纳入vendor
目录,然后原来的application
目录变成app
目录。
6.0
支持原生多应用模式部署,所以实际的目录结构取决于你采用的是单应用还是多应用模式,分别说明如下。
单应用模式
默认安装后的目录结构就是一个单应用模式
代码语言:javascript复制www WEB部署目录(或者子目录)
├─app 应用目录
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─view 视图目录
│ ├─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─event.php 事件定义文件
│
├─config 配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─route.php 路由和URL配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─route.php 路由定义文件
│ └─ ...
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
多应用模式
如果你需要一个多应用的项目架构,目录结构可以参考下面的结构进行调整(关于配置文件的详细结构参考后面章节)。
代码语言:javascript复制www WEB部署目录(或者子目录)
├─app 应用目录
│ ├─app_name 应用目录
│ │ ├─common.php 函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─event.php 事件定义文件
│
├─config 应用配置目录
│ ├─app_name 应用配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ ...
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─route.php 路由和URL配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─app_name 应用路由目录
│ │ ├─route.php 路由定义文件
│ │ └─ ...
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
多应用模式部署后,记得删除
app
目录下的controller
目录。
在实际的部署中,请确保只有public
目录可以对外访问。
代码语言:javascript复制在
mac
或者linux
环境下面,注意需要设置runtime
目录权限为777。
ThinkPHP6.0中的配置
配置目录结构与项目的结构有关,项目分为单应用和多应用。单应用下相对比较简单。
在多应用配置下,配置分为全局配置和应用配置,应用配置的优先级要高于全局配置。
配置项的读取和配置和之前的版本相差不是太多。
入口文件隐藏
没有特殊的需求,入口文件,一般情况下不需要做任何的修改。
在这里要注意,ThinkPHP6.0的url访问和之前版本的Url访问是有区别的。
单应用:
代码语言:javascript复制http://serverName/index.php(或者其它入口文件)/控制器/操作/参数/值…
多应用:
代码语言:javascript复制http://serverName/index.php?s=/控制器/操作/[参数名/参数值...]
在这里要注意,在多应用模式下,url访问时访问不到,是因为默认情况下,配置文件中开启了强制路由。另外要开启多应用模式。这样的话,才能够正常的访问。
在进行入口文件隐藏时,需要进行URL重写,不同的服务器环境,设置方式也不同。TP官方文档中有详情的说明。
命令行工具
命令行操作比较灵活方便,所以有必要去学习一下命令行。
在使用命令行工具时,需要注意以下事项
- PHP要设置为环境变量,并且版本要在7.1
- 在命令行中,执行命令时要定位到项目根目录
- 如果要使用命令创建应用,首先需要将build.example.php重命名为build.php并移入app目录
- 命令行工具的选用(推荐使用git bash)
基本命令
php think list
这个是比较重要的,可以查看目录所支持的所有命令
php think list
php think build 应用名称
创建应用
php think build admin
php think make:controller admin@Index
创建控制器
`php think make:controller admin@Index
.....
更多的命令,可以去看一下文档,或者 执行:php think list
Facade(门面)
facade也要外观模式,是一种设置模式。可以简单的理解为,可以将一个动态类库变为一个静态类库(向外提供一个静态的访问入口)。
下面是一个示例,假如我们定义了一个appcommonTest
类,里面有一个hello
动态方法。
<?php
namespace appcommon;
class Test
{
public function hello($name)
{
return 'hello,' . $name;
}
}
调用hello方法的代码应该类似于:
代码语言:javascript复制$test = new appcommonTest;
echo $test->hello('thinkphp'); // 输出 hello,thinkphp
数据迁移
使用数据库迁移工具可以将数据库结构和数据很容易的在不同的数据库之间管理迁移。
在以前,为了实现“程序安装”,你可能会导出一份sql文件,安装时,用程序解析这个sql文件,执行里面的语句,这样做有诸多的局限性,但现在使用数据库迁移工具,你可使用一个强大的类库API来创建数据库结构和记录,并且可以容易的安装到Mysql,sqlite,sqlserver等数据库。
使用之前你应当正确的连接到数据库,不论是mysql,sqlite,sqlserver
安装
代码语言:javascript复制composer require topthink/think-migration
创建迁移工具文件
代码语言:javascript复制//执行命令,创建一个操作文件,一定要用大驼峰写法,如下
php think migrate:create AnyClassNameYouWant
//执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件
//文件名类似/database/migrations/20190615151716_any_class_name_you_want.php
编辑文件
代码语言:javascript复制<?php
use thinkmigrationMigrator;
use thinkmigrationdbColumn;
class AnyClassNameYouWant extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{
// create the table
$table = $this->table('users',array('engine'=>'MyISAM'));
$table->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名,登陆使用'))
->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码'))
->addColumn('login_status', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'登陆状态'))
->addColumn('login_code', 'string',array('limit' => 32,'default'=>0,'comment'=>'排他性登陆标识'))
->addColumn('last_login_ip', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录IP'))
->addColumn('last_login_time', 'datetime',array('default'=>0,'comment'=>'最后登录时间'))
->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除'))
->addIndex(array('username'), array('unique' => true))
->create();
}
}
执行迁移工具
代码语言:javascript复制php think migrate:run
//此时数据库便创建了prefix_users表.
复制
数据库会有一个migrations表,这个是工具使用的表,不要修改
数据填充
数据填充就是向数据库中写入数据(测试数据)。
生成填充文件
ThinkPHP官方并没有相关的介绍,大家可以通过
php think list
来查看相关的命令
生成填充文件
代码语言:javascript复制php think seed:create SeederUser
编写填充代码
这里要注意,所谓数据填充,就是在填充文件中的run方法里面,进行数据插入操作,可以使用模型方式也可以使用数据库操作方式!
执行数据填充
代码语言:javascript复制php think seed:run
后端应用的创建
代码语言:javascript复制创建后台应用,只需要执行如下命令即可。
php think build admin