- 进入ThinkPHP官网,下载完整版本:http://www.thinkphp.cn/
- 解压出下载的 ThinkPHP 复制所有文件
- 在 phpstudy 安装路径下的找到 www 文件夹,新建 tp5 文件夹,将解压的所有 ThinkPHP 文件粘贴到tp5中
- 重启 phpstudy
- 在浏览器中输入 http://localhost/tp5/public/
- 显示为 “ ThinkPHP V5
十年磨一剑 - 为API开发设计的高性能框架”即为安装成功
- 所有的目录要使用小写+下划线
- 函数文件名必须以 .php 结尾
- 命名空间 namespace 必须和目录路径一致: php namespace app\index\controller
- 类库名必须和文件名保持一致,首字母必须大写,采用驼峰式书写:文件名为 Index.php 那么类库名必须为 class Index {...}
- 函数名必须为首字母小写,采用驼峰书写格式: pubilc function getUserName(){...}
- 变量名首字母小写,采用驼峰书写格式:public $userName = '';
- 构造函数名以双下载线+小写字母,这种文件尽量不用:public function __controll(){...}
- 常量必须全部大写并且以下划线连接:define('APP_STATE','dev');
- 所有配置名必须全部小写并且以下载线连接:'app_namespace' => 'app',
- 数据库或表名必须以小写字母加下载线连接,不能出现驼峰或首字母大写:user_name
- 顶及命名空间(目录)统一叫 app,形成良好的开发方式:namespace app\index\controller 从命名空间来看这个路径就是目录的路径
- 将 application 文件夹名称更改为 app。可以此文件夹下新建各种模块,比如首页(index)、登录管理(admin)、用户管理(user)等
- 建立首页(index)为例,路径为:app\index\controller\Index.php(意为index模块的控制器controller下的Index.php 文件)
- 建立方法 1)定义模块的命名空间 namespace app\index\controller; 2)定义类名 class Index {...} 3) 写方法 public function index(){...}
- 修改 public/index.php 路径,指向目录app,也就是入口路径
define ( 'APP_PATH' , __DIR__ . '/app/' );
php //定义app命名空间 namespace app\index\controller; //定义类名,类名和文件名保持一致 class Index { //编写一个方法 public function index(){ return "This is PHP Class Name." } } ?>
- 导入:use app\common\controller\User as commonUser;【导入app\模块名称\controller\文件名称 as 别名(别名以模块名称+方法名称,驼峰组合)】
- 继承: class User extends commonUser { ... } 将导入的方法继承给当前类,在当前类中的方法中使用
- 使用: 直接在当前方法中使用继承过来的方法
class User extends commonUser { public function demo(){ //直接return 继承过来的方法 showName() return $this -> showName("kevin.chen"); } }
ThinkPHP 浏览器测试模块地址:
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/方法/[参数名/参数值...]
serverName
后面应该为 tp5 的入口文件而非 phpstudy 的入口文件路径,否则会报一个莫名其妙的 403 错误!
当前服务器地址为 http://localhost
当前入口文件路径为 tp5/public/index.php
当前模块/控制器/方法为 index/index/test
Index.php
测试当前模块
ThinkPHP 修改默认配置 ,修改convention.php 可以达到修改配置php的目的,但是尽量不要对这个配置作任何的改变,否则以后对这个框架进行任何的升级会带来意想不到的错误。
- 在 public/index.php 中新建一个常量
//定义配置文件目录define('CONF_PATH', __DIR__ . '/../conf/')
-
与app同级新建一个 conf 目录
- 在index 模块的文件 Index.php 中新建一个方法,起名为 testConfig
public function testConfig(){dump(config());}
- 浏览器中测试 http://localhost/tp5/public/index.php/index/index/testConfig 返回当前状态的所有配置,当前状态的配置来源于 thinkphp>convention.php
- 修改 convention.php ,添加
//默认作者'app_author' => 'kevin.chen' , 刷新 url 即可看到 config 配置中已经添加一个 app_author 的数组
ThinkPHP 应用配置,修改当前应用的配置可以替换当前 PHP 默认的配置信息。应用配置目录 conf,所有的关于应用配置都在这个目录下修改
- 在 app 下新建一个后台的模块 admin\controller\Index.php
-
public function showAdminConfig(){dump(config());};
-
在浏览器中输入http://localhost/tp5/public/index.php/admin/index/showAdminConfig 同样可以打印出 php的配置,但是我们是不要使用 php 框架的配置文件信息的,我们是要打印自己应用的配置信息,因此需要建立自己应用的 config.php 配置文件
- 同 app 同级建立一个 conf 的目录,在这个目录下建立一个 config.php 配置文件,这个配置文件中直接 return 一个数组,这个数组就是 当前应用的配置信息
return ["app_name" => "my_anviz","app_author" => "kevin.chen","app_email" => "[email protected]",]
- 再次刷新 http://localhost/tp5/public/index.php/admin/index/showAdminConfig 就可以看到 打印的配置信息的尾部,增加了刚刚增加的数组。
- 说明应用配置信息是可以改变 PHP框架的配置信息的。如果想改变 php 的配置信息不可以修改convention.php文件,只需修改当前应用的配置信息即可改变 php 的配置信息。
- 比如想要修改 PHP中的调试模式为 true,只需在当前应用的配置文件中增加一条
app_debug => true 的配置信息即可改变原 php 的配置信息。return ["app_name" => "my_anviz","app_author" => "kevin.chen","app_email" => "[email protected]","app_debug" => true]
第二步,找到网站根目录,DocumentRoot "E:\soft\phpstudy2018\PHPTutorial\WWW",将 AllowOverride 设置为 All
- 定义应用目录入口
- 定义配置文件目录入口
- 加载框架引导文件
第二步,打开 thinkphp 框架的配置文件 convention.php 找到 auto_bind_module 这个入口自动绑定模块的配置信息
将它复制到 我们应用的配置文件中 app\conf\config.php 中,将默认值改为 true
第三步,在我们的应用中新建一个提供给第三方的模块,app\aip\controller\Api.php
思考:如果我们有多个入口文件,路径相同,指向应用相同,入口文件对应应用中的模块,只要在写 url 请求时 ,更改应用的模块名就可以访问不同的模块。是这样吗?
ThinkPHP 是个单入口框架,所有的入口都会进入 index.php 文件,通过 index.php来接收所有的http请求,请求中的所有参数都可以通过 Request 这个对象进行接收和处理。
下面就写 thinkPHP 的 Request 这个对象是怎么对请求进行处理的,首先要知道如何获取 request 这个对象的?
php namespace app\index\controller; use think\request; //Request 对象要从think\request 中获取 class Index { //注入对象的方式 public function index(Request $request){ dump($request); } } ?>
#如果想了解更加详细的 $request 的方法,就去 ThinkPHP/library/think/Request.php 中查看所有的方法
以下列举了常用的对参数获取的方法:
php namespace app\index\controller; use think\request; class Index { public function getRequest(Request $request){ #获取浏览器的值 #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest dump($request -> domain()); //获取浏览器的域名,返回为 "http://localhost" dump($request -> pathinfo()); //获取参数前的所有的路径,返回为 "index/index/getRequest" dump($request -> path()); //获取不含文件后缀的路径,如果没有后缀,pathinfo()同path()返回的对象是一样的,返回为 "index/index/getRequest" #判断请求类型 #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5 dump($request -> method()); //返回为 "GET" ,在web开发中一般只有GET与POST 两种请求类型 dump($request -> isGet()); //判断当前请求是否为GET,返回为一个布尔值为true = bool(true) dump($request -> isPost()); //判断是否为post请求,返回应该 为false dump($request -> isAjax()); //判断当前请求是否为 Ajax 请求,返回应该 为false #获取请求参数 #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 dump($request -> get()); //获取当前的get ?后的参数,返回key为id,value为5: ["id"] => string(1) "5" dump($request -> param()); //获取当前的get ?前的参数,返回key为id,value为5: ["id"] => string(1) "5" dump($request -> post()); //获取当前 post 的值,当前url是个get请求,因此只会返回一个空的数组 array(0) {} #测试session,获取当前浏览器的 session 的值,如果没有只会返回一个空的数组 array(0) {} #1、如果想要在浏览器中打印出来,需要进入thinkphp/convention.php,复制session配置到当前应用的config.php中 #2、需要使用助手方法给session,set一个值 session('name','kevin.chen'); //设置 session 的值 dump($request -> session()); //返回一个数组 array(1) {["name"] => string(10) "kevin.chen"} #测试 cookie,首先需要set一个值 cookie('email','[email protected]'); //设置cookie的值 dump($request -> cookie()); //获取 cookie的值,会返回一个 PHPSESSID 的值 #获取某个参数的值 #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在查询时通常使用通过某个 id 来查询等 dump($request -> get('id')); //返回 "5" dump($request -> cookie('email')); //返回 "[email protected]" dump($request -> post("id")); //不存在的id,返回为null dump($request -> param("page")); //返回为 "10" #获取当前的模块 控制器 方法 #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在编写权限控制时,通过这三个选项共同来验证是否有权限访问 dump($request -> module()); //返回当前模块名为 index dump($request -> controller()); //返回当前控制器名为 Index (首字母大写) dump($request -> action()); //返回当前方法名为 getRequest #获取当前 url #如果当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 dump($request -> url()); //返回 "/tp5/public/index/index/getRequest?id=5&page=10" dump($request -> baseUrl()); //返回不包含参数的url"/tp5/public/index/index/getRequest" } } ?>
ThinkPHP 连接数据库,并查询表
第一步,要新建数据库,phpMyAdmin,使用它来建库建表
第二步,数据库必须与PHP进行配置,才可以使用PHP来调用数据库,操作数据库。
数据库配置路径为:
- 找到 thinkPHP -> convention.php ,找到 数据库设置【database】这个数组
- 在当前应用的 conf 目录下,新建一下 database.php 文件
- 将 database 里面的key,value复制到新建的 database.php 当中,分别对 数据库中的 key 设置它的 value(配置红色注释部分)
- 将这个数组 return 返回
php //数据库配置 use\think\Env; return [ // 数据库类型 'type' => 'mysql', // 数据库连接DSN配置 'dsn' => '', // 服务器地址 'hostname' => '127.0.0.1', // 数据库名 'database' => 'test', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => 'root', // 数据库连接端口 'hostport' => '3306', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '' ] ?>
第三步,配置好数据库之后,就可以对数据库进行操作了。
在当前模块下新建一个方法,取名为 testDataBase
# 首先要加载 thinkphp 的db 方法 # 再用 db 的助手方法查询表 php namespace app\index\controller; use think\Db; class Index { #测试数据库是否连接成功 public function testDataBase(){ $res = db('user') -> find(); dump($res); } } ?>
我们在浏览器中输入如下 url ,就可以看到查询的表数据了:
http://localhost/tp5/public/index/index/testDataBase
array(3) { ["user_id"] => int(1) ["user_name"] => string(10) "kevin.chen" ["user_age"] => string(2) "34" }
返回3个字段,每个字段的 key,数据类型,value
project 应用部署目录
├─application 应用目录(可设置),所有的应用都写在这里,经常使用
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
├─admin(后台的逻辑,对应index模块)
│ ├─common.php php的公共函数,可以写在这里,任何地方都可以调用,应用公共(函数)文件
│ ├─tags.php 是对 ThinkPHP 框架进行扩展而不需要修改源码
├─extend 加载第三方库时使用,直接将类库下载到这个目录
│ ├─static 静态资源存放目录(css,js,image)
├─robots.txt 搜索引擎爬虫定义规则
│ └─.htaccess 用于 apache 的重写
├─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 命令行入口文件